corebasic 1.0.11 → 1.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/libs/app.js +3 -1
- package/libs/auth.js +92 -0
- package/libs/session.js +1 -1
- package/package.json +1 -1
package/libs/app.js
CHANGED
|
@@ -4,10 +4,12 @@ let Elabase = require('./elabase')
|
|
|
4
4
|
let Kafka = require('./kafka')
|
|
5
5
|
let Utils = require('./utils')
|
|
6
6
|
let Session = require('./session')
|
|
7
|
+
let Auth = require('./auth')
|
|
7
8
|
|
|
8
9
|
module.exports = {
|
|
9
10
|
Elabase,
|
|
10
11
|
Kafka,
|
|
11
12
|
Utils,
|
|
12
|
-
Session
|
|
13
|
+
Session,
|
|
14
|
+
Auth
|
|
13
15
|
}
|
package/libs/auth.js
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
const axios = require('axios');
|
|
2
|
+
const otpGenerator = require('otp-generator')
|
|
3
|
+
|
|
4
|
+
const Elabase = require('./elabase')
|
|
5
|
+
const Utils = require('./utils')
|
|
6
|
+
const Session = require('./session')
|
|
7
|
+
|
|
8
|
+
let validateFn, validateErrMessage
|
|
9
|
+
export function validate(callback, errMessage){
|
|
10
|
+
validateFn = callback
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export function start(app, successCallback) {
|
|
14
|
+
app.post("/login", async (req, res) => {
|
|
15
|
+
if (validateFn && !validateFn(req)) {
|
|
16
|
+
res.json({mode: 'login', success: false, msg: validateErrMessage ?? 'Validation Failed'})
|
|
17
|
+
return
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
let login = await auth.login(req, res)
|
|
21
|
+
if (login.mode === 'verify' && login.success) {
|
|
22
|
+
// let userId = "GET_LOGGED_IN_USER_ID" // login contains userId
|
|
23
|
+
let tokens = Session.generateAccessToken(login.userId, req.body.clientId)
|
|
24
|
+
let response = {tokens, ...login}
|
|
25
|
+
if (successCallback)
|
|
26
|
+
await successCallback(req, res, response)
|
|
27
|
+
else
|
|
28
|
+
res.json(response)
|
|
29
|
+
}
|
|
30
|
+
res.json(login)
|
|
31
|
+
})
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
async function login(req, res) {
|
|
36
|
+
let phone = req.body.phone
|
|
37
|
+
let time = new Date().getTime()
|
|
38
|
+
let collection = (req.body.app ? req.body.app + '.' : '') + "auth.login"
|
|
39
|
+
if (req.body.otp) { // verify login
|
|
40
|
+
try {
|
|
41
|
+
let res = await Elabase.query(collection, { _id: phone.trim(), otp: req.body.otp, time: { $gt: time - 300000 } })
|
|
42
|
+
if (res.length)
|
|
43
|
+
return {mode: 'verify', success: true, userId: res[0].userId}
|
|
44
|
+
throw false
|
|
45
|
+
} catch {
|
|
46
|
+
return {mode: 'verify', success: false}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
} else { // generate login
|
|
50
|
+
try {
|
|
51
|
+
let otp = otpGenerator.generate(4, { upperCaseAlphabets: false, specialChars: false, digital: true, lowerCaseAlphabets: false });
|
|
52
|
+
if (await sendOtp(phone, otp)) {
|
|
53
|
+
let userId = req.body.userId ?? Utils.uid()
|
|
54
|
+
await Elabase.update(collection, { _id: phone.trim() }, { $set: { otp, time }, $setOnInsert: { _id: phone.trim(), otp, time, userId } }, { upsert: true })
|
|
55
|
+
return {mode: 'login', success: true, userId}
|
|
56
|
+
}
|
|
57
|
+
throw false
|
|
58
|
+
} catch {
|
|
59
|
+
return {mode: 'login', success: false}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
async function sendOtp(phone, otp) {
|
|
66
|
+
try {
|
|
67
|
+
let link = process.env.SMS_API + phone + "/" + otp
|
|
68
|
+
await axios.get(link)
|
|
69
|
+
return true
|
|
70
|
+
} catch {
|
|
71
|
+
return false
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
// API
|
|
78
|
+
// ----
|
|
79
|
+
// Login => HttpRequest.post('/login').send({app: '', clientId: '', phone: '', otp: '', userId: 'on signup'}) // Response => { mode: 'login', success, userId }
|
|
80
|
+
// Verify => HttpRequest.post('/login').send({app: '', clientId: '', phone: '', otp: ''}) // Response => { mode: 'verify', success, userId }
|
|
81
|
+
|
|
82
|
+
// Usage
|
|
83
|
+
// Auth.validate((req) => ["Phone1", "Phone2"].includes(req.body.phone.trim()))
|
|
84
|
+
// Auth.start(app, async (req, res, data) => {
|
|
85
|
+
// try {
|
|
86
|
+
// await Elabase.insert("users", { }, "asdsds")
|
|
87
|
+
// await Kafka.send("users", {event: "userLogin", ...data, time: Utils.now()})
|
|
88
|
+
// res.json(data)
|
|
89
|
+
// } catch {
|
|
90
|
+
// res.json({...data, success: false})
|
|
91
|
+
// }
|
|
92
|
+
// })
|
package/libs/session.js
CHANGED
|
@@ -14,7 +14,7 @@ const REFRESH_TOKEN_SECRET = process.env.JWT_REFRESH_TOKEN_SECRET || "MY_SECRET_
|
|
|
14
14
|
let urlsAllowed = []
|
|
15
15
|
|
|
16
16
|
function start(expressApp, allowedUrls) {
|
|
17
|
-
urlsAllowed = ["/refreshToken"].concat(allowedUrls)
|
|
17
|
+
urlsAllowed = ["/refreshToken", "/login"].concat(allowedUrls ?? [])
|
|
18
18
|
app = expressApp
|
|
19
19
|
|
|
20
20
|
|