Skip to content

Commit 937528f

Browse files
committed
fix(security): signing in public folders
1 parent 2d39b9b commit 937528f

File tree

3 files changed

+24
-6
lines changed

3 files changed

+24
-6
lines changed

src/backend/src/routers/file.js

+8-1
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,12 @@ router.get('/file', async (req, res, next)=>{
3939
console.log(e)
4040
return res.status(403).send(e);
4141
}
42+
43+
let can_write = false;
44+
try{
45+
validate_signature_auth(get_url_from_req(req), 'write');
46+
can_write = true;
47+
}catch(e){}
4248

4349
const log = req.services.get('log-service').create('/file');
4450
const errors = req.services.get('error-service').create(log);
@@ -80,7 +86,8 @@ router.get('/file', async (req, res, next)=>{
8086
if(children.length>0){
8187
for(const child of children){
8288
// sign file
83-
const signed_child = await sign_file(child, 'write');
89+
const signed_child = await sign_file(child,
90+
can_write ? 'write' : 'read');
8491
signed_children.push(signed_child);
8592
}
8693
}

src/backend/src/routers/open_item.js

+8-3
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,16 @@ module.exports = eggspress('/open_item', {
5454
}
5555

5656
const svc_acl = Context.get('services').get('acl');
57-
if ( ! await svc_acl.check(actor, subject, 'see') ) {
58-
throw await svc_acl.get_safe_acl_error(actor, subject, 'see');
57+
if ( ! await svc_acl.check(actor, subject, 'read') ) {
58+
throw await svc_acl.get_safe_acl_error(actor, subject, 'read');
59+
}
60+
61+
let action = 'write';
62+
if ( ! await svc_acl.check(actor, subject, 'write') ) {
63+
action = 'read';
5964
}
6065

61-
const signature = await sign_file(subject.entry, 'write');
66+
const signature = await sign_file(subject.entry, action);
6267
const suggested_apps = await suggest_app_for_fsentry(subject.entry);
6368
console.log('suggested apps?', suggested_apps);
6469
const apps_only_one = suggested_apps.slice(0,1);

src/backend/src/routers/sign.js

+8-2
Original file line numberDiff line numberDiff line change
@@ -111,8 +111,14 @@ module.exports = eggspress('/sign', {
111111
}
112112

113113
const svc_acl = Context.get('services').get('acl');
114-
if ( ! await svc_acl.check(actor, node, 'see') ) {
115-
throw await svc_acl.get_safe_acl_error(actor, node, 'see');
114+
if ( ! await svc_acl.check(actor, node, 'read') ) {
115+
throw await svc_acl.get_safe_acl_error(actor, node, 'read');
116+
}
117+
118+
if ( item.action === 'write' ) {
119+
if ( ! await svc_acl.check(actor, node, 'write') ) {
120+
throw await svc_acl.get_safe_acl_error(actor, node, 'write');
121+
}
116122
}
117123

118124
if ( app !== null ) {

0 commit comments

Comments
 (0)