allow binding google auth with login screen

auto-build-api-doc-with-code
Moe 2021-04-03 14:16:15 -07:00
parent faf3e3b221
commit 8249a9d74b
3 changed files with 36 additions and 13 deletions

View File

@ -1,5 +1,8 @@
const {OAuth2Client} = require('google-auth-library'); const {OAuth2Client} = require('google-auth-library');
module.exports = (s,config,lang) => { module.exports = (s,config,lang) => {
const {
basicAuth,
} = require('./utils.js')(s,config,lang)
const client = new OAuth2Client(config.appTokenGoogle); const client = new OAuth2Client(config.appTokenGoogle);
async function verifyToken(userLoginToken) { async function verifyToken(userLoginToken) {
const ticket = await client.verifyIdToken({ const ticket = await client.verifyIdToken({
@ -25,7 +28,7 @@ module.exports = (s,config,lang) => {
columns: '*', columns: '*',
table: "LoginTokens", table: "LoginTokens",
where: [ where: [
['loginId','=',user.id], ['loginId','=',loginId],
] ]
}) })
if(!searchResponse.rows[0]){ if(!searchResponse.rows[0]){
@ -71,10 +74,12 @@ module.exports = (s,config,lang) => {
return response return response
} }
async function loginWithGoogleAccount(userLoginToken) { async function loginWithGoogleAccount(userLoginToken) {
const response = {ok: false} const response = {ok: false, googleSignedIn: false}
const tokenResponse = await verifyToken(userLoginToken) const tokenResponse = await verifyToken(userLoginToken)
if(tokenResponse.ok){ if(tokenResponse.ok){
const user = tokenResponse.user const user = tokenResponse.user
response.googleSignedIn = true
response.googleUser = user
const searchResponse = await s.knexQueryPromise({ const searchResponse = await s.knexQueryPromise({
action: "select", action: "select",
columns: '*', columns: '*',
@ -104,15 +109,32 @@ module.exports = (s,config,lang) => {
} }
return response return response
} }
s.alternateLogins['google'] = async (loginToken) => { s.onProcessReady(() => {
const response = { ok: false } s.alternateLogins['google'] = async (params) => {
const tokenVerifyResponse = await loginWithGoogleAccount(loginToken) const response = { ok: false }
if(tokenVerifyResponse.user){ const loginToken = params.alternateLoginToken
response.ok = true const username = params.mail
response.user = tokenVerifyResponse.user const password = params.pass
const googleLoginResponse = await loginWithGoogleAccount(loginToken)
if(googleLoginResponse.user){
response.ok = true
response.user = googleLoginResponse.user
}else if(config.allowBindingAltLoginsFromLoginPage && googleLoginResponse.googleSignedIn && username && password){
const basicAuthResponse = await basicAuth(username,password)
if(basicAuthResponse.user){
const user = basicAuthResponse.user
const loginId = googleLoginResponse.googleUser.id
const groupKey = user.ke
const userId = user.uid
const bindResponse = await bindLoginIdToUser(loginId,groupKey,userId)
response.ok = true
response.user = basicAuthResponse.user
}
}
return response
} }
return response // s.customAutoLoadTree['LibsJs'].push(`dash2.googleSignIn.js`)
} })
return { return {
client: client, client: client,
verifyToken: verifyToken, verifyToken: verifyToken,

View File

@ -14,8 +14,10 @@ module.exports = function(s,config,lang){
limit: 1 limit: 1
},(err,r) => { },(err,r) => {
if(!err && r && r[0]){ if(!err && r && r[0]){
const user = r[0]
response.ok = true response.ok = true
response.user = r[0] user.details = s.parseJSON(user.details)
response.user = user
}else{ }else{
response.err = err response.err = err
} }

View File

@ -355,7 +355,7 @@ module.exports = function(s,config,lang,app,io){
console.log(req.body) console.log(req.body)
if(req.body.alternateLogin && s.alternateLogins[req.body.alternateLogin]){ if(req.body.alternateLogin && s.alternateLogins[req.body.alternateLogin]){
const alternateLogin = s.alternateLogins[req.body.alternateLogin] const alternateLogin = s.alternateLogins[req.body.alternateLogin]
const alternateLoginResponse = await alternateLogin(req.body.alternateLoginToken) const alternateLoginResponse = await alternateLogin(req.body)
if(alternateLoginResponse.ok && alternateLoginResponse.user){ if(alternateLoginResponse.ok && alternateLoginResponse.user){
const user = alternateLoginResponse.user const user = alternateLoginResponse.user
const sessionKey = s.md5(s.gid()) const sessionKey = s.md5(s.gid())
@ -389,7 +389,6 @@ module.exports = function(s,config,lang,app,io){
const user = basicAuthResponse.user; const user = basicAuthResponse.user;
const sessionKey = s.md5(s.gid()) const sessionKey = s.md5(s.gid())
user.auth = sessionKey user.auth = sessionKey
user.details = s.parseJSON(user.details)
user.lang = s.getLanguageFile(user.details.lang) user.lang = s.getLanguageFile(user.details.lang)
s.knexQuery({ s.knexQuery({
action: "update", action: "update",