Skip to content

Commit dfd4029

Browse files
committed
Don't allow setting personal password when already set
Fixes #180
1 parent c26418e commit dfd4029

File tree

4 files changed

+95
-4
lines changed

4 files changed

+95
-4
lines changed

api/v1/controllers/personal.mjs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,16 @@ export async function setPassword (req, res, next) {
6868
return
6969
}
7070

71+
// Check that personal password is not already set
72+
const user = await DB.users.findUnique({
73+
where: { id: req.user },
74+
select: { personalsecret: true }
75+
})
76+
if (user.personalsecret !== null) {
77+
res.status(R.UNPROCESSABLE_ENTITY).send(R.ko('Personal password already set'))
78+
return
79+
}
80+
7181
// Create personal storage key
7282
const pkey = Crypt.randomAESKey()
7383

docs/apidoc/paths/personalpassword.yaml

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,14 @@ post:
44
operationId: personalpasswordset
55
summary: Set personal folder password
66
description: Set personal folder password. The user must already be logged in.
7+
security:
8+
- bearerAuth: []
79
requestBody:
810
required: true
911
content:
1012
application/json:
1113
schema:
1214
$ref: '..\requestbodies\personalpassword.yaml#/personalpasswordBody'
13-
1415
responses:
1516
"200":
1617
$ref: '..\responsebodies\personalpassword.yaml#/success'
@@ -19,20 +20,47 @@ post:
1920
$ref: '..\responsebodies\default.yaml#/badrequest'
2021
"401":
2122
$ref: '..\responsebodies\default.yaml#/unauthorized'
23+
"422":
24+
$ref: '..\responsebodies\default.yaml#/unauthorized'
25+
description: Personal password already set
2226

2327
patch:
2428
tags:
2529
- Personal folders
2630
operationId: personalpasswordupdate
2731
summary: Change personal folder password
2832
description: Change personal folder password. The user must already be logged in.
33+
security:
34+
- bearerAuth: []
2935
requestBody:
3036
required: true
3137
content:
3238
application/json:
3339
schema:
3440
$ref: '..\requestbodies\personalpassword.yaml#/personalpasswordBody'
41+
responses:
42+
"200":
43+
$ref: '..\responsebodies\personalpassword.yaml#/success'
44+
description: Personal password set
45+
"400":
46+
$ref: '..\responsebodies\default.yaml#/badrequest'
47+
"401":
48+
$ref: '..\responsebodies\default.yaml#/unauthorized'
3549

50+
delete:
51+
tags:
52+
- Personal folders
53+
operationId: personalpasswordreset
54+
summary: Delete personal folder password
55+
description: Delete personal folder password. All personal item will be unreadable.
56+
security:
57+
- bearerAuth: []
58+
requestBody:
59+
required: true
60+
content:
61+
application/json:
62+
schema:
63+
$ref: '..\requestbodies\personalpassword.yaml#/personalpasswordBody'
3664
responses:
3765
"200":
3866
$ref: '..\responsebodies\personalpassword.yaml#/success'

docs/apidoc/paths/personalunlock.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,14 @@ post:
44
operationId: personalunlock
55
summary: Unlock user personal folder
66
description: Unlock user personal folder. The user must already be logged in.
7+
security:
8+
- bearerAuth: []
79
requestBody:
810
required: true
911
content:
1012
application/json:
1113
schema:
1214
$ref: '..\requestbodies\personalunlock.yaml#/personalunlockBody'
13-
1415
responses:
1516
"200":
1617
$ref: '..\responsebodies\personalunlock.yaml#/success'

test/personal.spec.cjs

Lines changed: 54 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,20 @@ require('./common.cjs')
44

55
describe('Personal folders', function () {
66
it('Set personal password', async () => {
7-
const res1 = await agent
7+
// Delete personal password. Ignore the error.
8+
await agent
9+
.delete(`${global.host}/api/v1/personal/password`)
10+
.set('Authorization', `Bearer ${global.userJWT}`)
11+
.send({ password: '123' })
12+
.catch(v => v)
13+
14+
const res2 = await agent
815
.post(`${global.host}/api/v1/personal/password`)
916
.set('Authorization', `Bearer ${global.userJWT}`)
1017
.send({ password: '123' })
1118
.catch(v => v)
1219

13-
assert.strictEqual(res1.status, 200)
20+
assert.strictEqual(res2.status, 200)
1421
})
1522

1623
it('Unlock personal folders', async () => {
@@ -32,6 +39,19 @@ describe('Personal folders', function () {
3239
})
3340

3441
it('Create, update and remove personal item', async () => {
42+
// Delete personal password. Ignore the error.
43+
await agent
44+
.delete(`${global.host}/api/v1/personal/password`)
45+
.set('Authorization', `Bearer ${global.userJWT}`)
46+
.send({ password: '123' })
47+
.catch(v => v)
48+
49+
await agent
50+
.post(`${global.host}/api/v1/personal/password`)
51+
.set('Authorization', `Bearer ${global.userJWT}`)
52+
.send({ password: '123' })
53+
.catch(v => v)
54+
3555
const res1 = await agent
3656
.post(`${global.host}/api/v1/personal/unlock`)
3757
.set('Authorization', `Bearer ${global.userJWT}`)
@@ -67,6 +87,13 @@ describe('Personal folders', function () {
6787
})
6888

6989
it('Reset personal password', async () => {
90+
// Delete personal password. Ignore the error.
91+
await agent
92+
.delete(`${global.host}/api/v1/personal/password`)
93+
.set('Authorization', `Bearer ${global.userJWT}`)
94+
.send({ password: '123' })
95+
.catch(v => v)
96+
7097
const res1 = await agent
7198
.post(`${global.host}/api/v1/personal/password`)
7299
.set('Authorization', `Bearer ${global.userJWT}`)
@@ -90,4 +117,29 @@ describe('Personal folders', function () {
90117

91118
assert.strictEqual(res3.status, 200)
92119
})
120+
121+
it('Set personal password when already set', async () => {
122+
// Delete personal password. Ignore the error.
123+
await agent
124+
.delete(`${global.host}/api/v1/personal/password`)
125+
.set('Authorization', `Bearer ${global.userJWT}`)
126+
.send({ password: '123' })
127+
.catch(v => v)
128+
129+
const res1 = await agent
130+
.post(`${global.host}/api/v1/personal/password`)
131+
.set('Authorization', `Bearer ${global.userJWT}`)
132+
.send({ password: '123' })
133+
.catch(v => v)
134+
135+
assert.strictEqual(res1.status, 200)
136+
137+
const res2 = await agent
138+
.post(`${global.host}/api/v1/personal/password`)
139+
.set('Authorization', `Bearer ${global.userJWT}`)
140+
.send({ password: '123' })
141+
.catch(v => v)
142+
143+
assert.strictEqual(res2.status, 422)
144+
})
93145
})

0 commit comments

Comments
 (0)