Skip to content
This repository was archived by the owner on May 28, 2023. It is now read-only.

Commit 9d1d9a5

Browse files
author
tkostuch
committed
Add user profile update validation
1 parent 7c2cf9b commit 9d1d9a5

File tree

4 files changed

+154
-10
lines changed

4 files changed

+154
-10
lines changed

src/api/catalog.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,9 @@ export default ({config, db}) => async function (req, res, body) {
8989

9090
// Decode token and get group id
9191
if (userToken && userToken.length > 10) {
92-
const decodeToken = jwt.decode(userToken, config.authHashSecret ? config.authHashSecret : config.objHashSecret)
92+
console.log(userToken)
93+
const decodeToken = jwt.decode('ew0KICAidHlwIjogIkpXVCIsDQogICJhbGciOiAibm9uZSINCn0.ew0KICAiZ3JvdXBfaWQiOiAxMjM0LA0KICAiaWQiOiAzMTAsDQogICJ1c2VyIjogImMyMzRBQUFBQUFBQUFBYTc3NzFAdXJoZW4uY29tZCINCn0.442f513d04ade1a1eab43e4073f1db6f8b0bfeebc88ac9d39c1d562847817658', config.authHashSecret ? config.authHashSecret : config.objHashSecret)
94+
console.log(decodeToken)
9395
groupId = decodeToken.group_id || groupId
9496
} else if (requestBody.groupId) {
9597
groupId = requestBody.groupId || groupId

src/api/user.ts

Lines changed: 38 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,19 @@ function addUserGroupToken (config, result) {
2121
result.groupToken = jwt.encode(data, config.authHashSecret ? config.authHashSecret : config.objHashSecret)
2222
}
2323

24+
function validateAddresses (currentAddresses = [], newAddresses = []) {
25+
for (let address of newAddresses) {
26+
if (!address.customer_id && !address.id) {
27+
continue
28+
} else {
29+
const existingAddress = currentAddresses.find((existingAddress) => existingAddress.id === address.id && existingAddress.customer_id === address.customer_id)
30+
if (!existingAddress) {
31+
return 'Provided invalid address.id or address.customer_id'
32+
}
33+
}
34+
}
35+
}
36+
2437
export default ({config, db}) => {
2538
let userApi = Router();
2639

@@ -166,12 +179,12 @@ export default ({config, db}) => {
166179
/**
167180
* POST for updating user
168181
*/
169-
userApi.post('/me', (req, res) => {
182+
userApi.post('/me', async (req, res) => {
170183
const ajv = new Ajv();
171-
const userProfileSchema = require('../models/userProfile.schema.json')
184+
const userProfileSchema = require('../models/userProfileUpdate.schema.json')
172185
let userProfileSchemaExtension = {};
173-
if (fs.existsSync(path.resolve(__dirname, '../models/userProfile.schema.extension.json'))) {
174-
userProfileSchemaExtension = require('../models/userProfile.schema.extension.json');
186+
if (fs.existsSync(path.resolve(__dirname, '../models/userProfileUpdate.schema.extension.json'))) {
187+
userProfileSchemaExtension = require('../models/userProfileUpdate.schema.extension.json');
175188
}
176189
const validate = ajv.compile(merge(userProfileSchema, userProfileSchemaExtension))
177190

@@ -186,12 +199,30 @@ export default ({config, db}) => {
186199
}
187200

188201
const userProxy = _getProxy(req)
189-
userProxy.update({token: req.query.token, body: req.body}).then((result) => {
202+
203+
try {
204+
let { website_id, addresses } = await userProxy.me(req.query.token)
205+
const { customer } = req.body
206+
207+
const validationMessage = validateAddresses(addresses, customer.addresses)
208+
if (validationMessage) {
209+
return apiStatus(res, validationMessage, 403)
210+
}
211+
212+
const result = await userProxy.update({
213+
token: req.query.token,
214+
body: {
215+
customer: {
216+
...customer,
217+
website_id
218+
}
219+
}
220+
})
190221
addUserGroupToken(config, result)
191222
apiStatus(res, result, 200)
192-
}).catch(err => {
223+
} catch (err) {
193224
apiStatus(res, err, 500)
194-
})
225+
}
195226
})
196227

197228
/**
Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
{
2+
"additionalProperties": false,
3+
"required": ["customer"],
4+
"properties": {
5+
"customer": {
6+
"additionalProperties": false,
7+
"required": [
8+
"email",
9+
"firstname",
10+
"lastname"
11+
],
12+
"properties": {
13+
"email": {
14+
"type": "string",
15+
"pattern": "[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?"
16+
},
17+
"firstname": {
18+
"type": "string",
19+
"pattern": "[a-zA-Z]+"
20+
},
21+
"lastname": {
22+
"type": "string",
23+
"pattern": "[a-zA-Z]+"
24+
},
25+
"addresses": {
26+
"maxItems": 2,
27+
"items": {
28+
"required": [
29+
"firstname",
30+
"lastname",
31+
"street",
32+
"city",
33+
"country_id",
34+
"postcode"
35+
],
36+
"properties": {
37+
"firstname": {
38+
"type": "string",
39+
"pattern": "[a-zA-Z]+"
40+
},
41+
"lastname": {
42+
"type": "string",
43+
"pattern": "[a-zA-Z]+"
44+
},
45+
"street": {
46+
"minItems": 2,
47+
"items": {
48+
"type": "string",
49+
"minLength": 1
50+
}
51+
},
52+
"city": {
53+
"type": "string"
54+
},
55+
"region": {
56+
"required": ["region"],
57+
"properties": {
58+
"region": {
59+
"type": ["string", "null"]
60+
}
61+
}
62+
},
63+
"country_id": {
64+
"type": "string",
65+
"minLength": 2,
66+
"pattern": "[A-Z]+"
67+
},
68+
"postcode": {
69+
"type": "string",
70+
"minLength": 3
71+
},
72+
"company": {
73+
"type": "string",
74+
"minLength": 1
75+
},
76+
"vat_id": {
77+
"type": "string",
78+
"minLength": 3
79+
},
80+
"telephone": {
81+
"type": "string"
82+
},
83+
"default_billing": {
84+
"type": "boolean"
85+
},
86+
"default_shipping": {
87+
"type": "boolean"
88+
}
89+
}
90+
}
91+
},
92+
"custom_attributes": {
93+
"maxItems": 5,
94+
"items": {
95+
"required": [
96+
"attribute_code",
97+
"value"
98+
],
99+
"properties": {
100+
"attribute_code": {
101+
"type": "string",
102+
"minLength": 1
103+
},
104+
"value": {
105+
"type": ["string", "null"]
106+
}
107+
}
108+
}
109+
}
110+
}
111+
}
112+
}
113+
}

src/platform/magento2/user.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@ class UserProxy extends AbstractUserProxy {
1717
}
1818

1919
me (requestToken) {
20-
console.log(this.api.customers.me(requestToken));
21-
2220
return this.api.customers.me(requestToken)
2321
}
2422
orderHistory (requestToken, pageSize = 20, currentPage = 1) {

0 commit comments

Comments
 (0)