@rpcbase/server 0.299.0 → 0.301.0
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/express/index.js +2 -0
- package/package.json +1 -1
- package/src/api/index.js +6 -0
- package/src/api/stored-values/get_stored_values.js +37 -0
- package/src/api/stored-values/index.js +10 -0
- package/src/api/stored-values/set_stored_values.js +31 -0
- package/src/auth/sign_up.js +10 -3
- package/src/models/UserStoredValues.js +18 -0
package/express/index.js
CHANGED
|
@@ -7,6 +7,7 @@ const Sentry = require("@sentry/node")
|
|
|
7
7
|
|
|
8
8
|
// functionality middlewares
|
|
9
9
|
const auth = require("../src/auth")
|
|
10
|
+
const api = require("../src/api")
|
|
10
11
|
const sessions = require("../src/sessions")
|
|
11
12
|
|
|
12
13
|
const dev_save_coverage = require("./dev_save_coverage")
|
|
@@ -78,6 +79,7 @@ module.exports = () => {
|
|
|
78
79
|
app.post("/__ping", (req, res) => res.json({message: "pong"}))
|
|
79
80
|
|
|
80
81
|
auth(app)
|
|
82
|
+
api(app)
|
|
81
83
|
|
|
82
84
|
dev_save_coverage(app)
|
|
83
85
|
|
package/package.json
CHANGED
package/src/api/index.js
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/* @flow */
|
|
2
|
+
const assert = require("assert")
|
|
3
|
+
|
|
4
|
+
const UserStoredValues = require("../../models/UserStoredValues")
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
const get_projection = (payload) => {
|
|
8
|
+
const projection = {}
|
|
9
|
+
|
|
10
|
+
payload.forEach((key) => {
|
|
11
|
+
projection[key] = 1
|
|
12
|
+
})
|
|
13
|
+
|
|
14
|
+
return projection
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
const get_stored_values = async(payload, ctx) => {
|
|
19
|
+
const {user_id} = ctx.req.session
|
|
20
|
+
expect(user_id).toBeMongoId()
|
|
21
|
+
|
|
22
|
+
const projection = get_projection(payload)
|
|
23
|
+
|
|
24
|
+
const storage_doc = await UserStoredValues.findOne({_owners: {$in: [user_id]}}, projection, {ctx})
|
|
25
|
+
assert(storage_doc, `unable to retrieve storage_doc for user: ${user_id}`)
|
|
26
|
+
|
|
27
|
+
const result = {
|
|
28
|
+
values: payload.map((k) => storage_doc.get(k)),
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
return {
|
|
32
|
+
status: "ok",
|
|
33
|
+
...result,
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
module.exports = get_stored_values
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/* @flow */
|
|
2
|
+
const handler_wrapper = require("../../helpers/handler_wrapper")
|
|
3
|
+
|
|
4
|
+
const get_stored_values = require("./get_stored_values")
|
|
5
|
+
const set_stored_values = require("./set_stored_values")
|
|
6
|
+
|
|
7
|
+
module.exports = (app) => {
|
|
8
|
+
app.post("/api/v1/stored-values/get", handler_wrapper(get_stored_values))
|
|
9
|
+
app.post("/api/v1/stored-values/set", handler_wrapper(set_stored_values))
|
|
10
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/* @flow */
|
|
2
|
+
const assert = require("assert")
|
|
3
|
+
|
|
4
|
+
const UserStoredValues = require("../../models/UserStoredValues")
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
const set_stored_values = async(payload, ctx) => {
|
|
8
|
+
const {values} = payload
|
|
9
|
+
|
|
10
|
+
const {user_id} = ctx.req.session
|
|
11
|
+
expect(user_id).toBeMongoId()
|
|
12
|
+
|
|
13
|
+
const updates = Object.create(null)
|
|
14
|
+
|
|
15
|
+
values.forEach(({key, value}) => {
|
|
16
|
+
updates[key] = value
|
|
17
|
+
})
|
|
18
|
+
|
|
19
|
+
const res = await UserStoredValues.updateOne(
|
|
20
|
+
{_owners: {$in: [user_id]}},
|
|
21
|
+
{$set: updates},
|
|
22
|
+
{ctx}
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
console.log("LA RES UPDATE", res)
|
|
26
|
+
// assert(res.updatedCount === 1, `unable to update user stored values`)
|
|
27
|
+
|
|
28
|
+
return {status: "ok"}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
module.exports = set_stored_values
|
package/src/auth/sign_up.js
CHANGED
|
@@ -2,9 +2,12 @@
|
|
|
2
2
|
const {hash_password} = require("@rpcbase/std/crypto/hash")
|
|
3
3
|
|
|
4
4
|
const get_object_id = require("../../get_object_id")
|
|
5
|
-
|
|
6
5
|
const mongoose = require("../../mongoose")
|
|
7
6
|
|
|
7
|
+
const UserStoredValues = require("../models/UserStoredValues")
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
8
11
|
const MIN_PASSWORD_LENGTH = 12
|
|
9
12
|
|
|
10
13
|
const sign_up = async(payload, ctx, session) => {
|
|
@@ -42,13 +45,17 @@ const sign_up = async(payload, ctx, session) => {
|
|
|
42
45
|
password_hash: hash
|
|
43
46
|
})
|
|
44
47
|
|
|
48
|
+
|
|
45
49
|
// sign the user in
|
|
46
50
|
const user_id = user._id.toString()
|
|
47
51
|
|
|
52
|
+
const values_store = new UserStoredValues({_owners: [user_id]})
|
|
53
|
+
|
|
48
54
|
// WARNING: it is now the responsibility of the app to add user.save with session
|
|
49
|
-
// await user.save({ctx})
|
|
55
|
+
// await user.save({ctx, session})
|
|
56
|
+
// await values_store.save({ctx, session})
|
|
50
57
|
|
|
51
|
-
return user
|
|
58
|
+
return {user, values_store}
|
|
52
59
|
}
|
|
53
60
|
|
|
54
61
|
module.exports = sign_up
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/* @flow */
|
|
2
|
+
const mongoose = require("../../mongoose")
|
|
3
|
+
|
|
4
|
+
const UserStoredValuesSchema = new mongoose.Schema({
|
|
5
|
+
_owners: {
|
|
6
|
+
type: Array,
|
|
7
|
+
required: true,
|
|
8
|
+
index: true,
|
|
9
|
+
default: undefined,
|
|
10
|
+
},
|
|
11
|
+
}, {
|
|
12
|
+
strict: false,
|
|
13
|
+
versionKey: false,
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
const model = mongoose.model("UserStoredValues", UserStoredValuesSchema, "userstoredvalues")
|
|
17
|
+
|
|
18
|
+
module.exports = model
|