Skip to content

Commit 8569761

Browse files
authored
Fix bug where users may vote for their own merge (#3565)
1 parent 7487841 commit 8569761

File tree

3 files changed

+26
-2
lines changed

3 files changed

+26
-2
lines changed

synapse/lib/stormtypes.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7718,6 +7718,8 @@ async def setMergeVote(self, approved=True, comment=None):
77187718
mesg = 'You are not a member of a role with voting privileges for this merge request.'
77197719
raise s_exc.AuthDeny(mesg=mesg)
77207720

7721+
view.reqValidVoter(self.runt.user.iden)
7722+
77217723
vote = {'user': self.runt.user.iden, 'approved': await tobool(approved)}
77227724

77237725
if comment is not None:

synapse/lib/view.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -268,15 +268,28 @@ async def setMergeVote(self, vote):
268268
vote['offset'] = await self.layers[0].getEditIndx()
269269
return await self._push('merge:vote:set', vote)
270270

271+
def reqValidVoter(self, useriden):
272+
273+
merge = self.getMergeRequest()
274+
if merge is None:
275+
raise s_exc.BadState(mesg=f'View ({self.iden}) does not have a merge request.')
276+
277+
if merge.get('creator') == useriden:
278+
raise s_exc.AuthDeny(mesg='A user may not vote for their own merge request.')
279+
271280
@s_nexus.Pusher.onPush('merge:vote:set')
272281
async def _setMergeVote(self, vote):
273282

274283
self.reqParentQuorum()
275284
s_schemas.reqValidVote(vote)
276285

277-
uidn = s_common.uhex(vote.get('user'))
286+
useriden = vote.get('user')
287+
288+
self.reqValidVoter(useriden)
289+
290+
bidn = s_common.uhex(useriden)
278291

279-
self.core.slab.put(self.bidn + b'merge:vote' + uidn, s_msgpack.en(vote), db='view:meta')
292+
self.core.slab.put(self.bidn + b'merge:vote' + bidn, s_msgpack.en(vote), db='view:meta')
280293

281294
await self.core.feedBeholder('view:merge:vote:set', {'view': self.iden, 'vote': vote})
282295

synapse/tests/test_lib_stormtypes.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6416,6 +6416,9 @@ async def test_view_quorum(self):
64166416
with self.raises(s_exc.SynErr):
64176417
await core.callStorm('$lib.view.get().merge()', opts={'view': fork00})
64186418

6419+
with self.raises(s_exc.BadState):
6420+
core.getView(fork00).reqValidVoter(visi.iden)
6421+
64196422
with self.raises(s_exc.AuthDeny):
64206423
await core.callStorm('$lib.view.get().setMergeRequest()', opts={'user': visi.iden, 'view': fork00})
64216424

@@ -6425,12 +6428,18 @@ async def test_view_quorum(self):
64256428
self.eq(merge['comment'], 'woot')
64266429
self.eq(merge['creator'], core.auth.rootuser.iden)
64276430

6431+
with self.raises(s_exc.AuthDeny):
6432+
core.getView(fork00).reqValidVoter(root.iden)
6433+
64286434
merge = await core.callStorm('return($lib.view.get().getMergeRequest())', opts={'view': fork00})
64296435
self.nn(merge['iden'])
64306436
self.nn(merge['created'])
64316437
self.eq(merge['comment'], 'woot')
64326438
self.eq(merge['creator'], core.auth.rootuser.iden)
64336439

6440+
with self.raises(s_exc.AuthDeny):
6441+
await core.callStorm('$lib.view.get().setMergeVote()', opts={'view': fork00})
6442+
64346443
with self.raises(s_exc.AuthDeny):
64356444
await core.callStorm('$lib.view.get().setMergeVote()', opts={'user': visi.iden, 'view': fork00})
64366445

0 commit comments

Comments
 (0)