allow binding google auth with login screen
parent
faf3e3b221
commit
8249a9d74b
|
|
@ -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(() => {
|
||||||
|
s.alternateLogins['google'] = async (params) => {
|
||||||
const response = { ok: false }
|
const response = { ok: false }
|
||||||
const tokenVerifyResponse = await loginWithGoogleAccount(loginToken)
|
const loginToken = params.alternateLoginToken
|
||||||
if(tokenVerifyResponse.user){
|
const username = params.mail
|
||||||
|
const password = params.pass
|
||||||
|
const googleLoginResponse = await loginWithGoogleAccount(loginToken)
|
||||||
|
if(googleLoginResponse.user){
|
||||||
response.ok = true
|
response.ok = true
|
||||||
response.user = tokenVerifyResponse.user
|
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,
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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",
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue