Skip to content

Commit 16cb3b1

Browse files
committed
probably working backend
1 parent 7bde325 commit 16cb3b1

File tree

5 files changed

+33
-16
lines changed

5 files changed

+33
-16
lines changed

mwdb/app.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
GroupListResource,
5050
GroupMemberResource,
5151
GroupResource,
52+
JoinGroupInviteLinkResource,
5253
RequestGroupInviteLinkResource,
5354
)
5455
from mwdb.resources.karton import KartonAnalysisResource, KartonObjectResource
@@ -346,6 +347,7 @@ def require_auth():
346347
api.add_resource(GroupResource, "/group/<name>")
347348
api.add_resource(GroupMemberResource, "/group/<name>/member/<login>")
348349
api.add_resource(RequestGroupInviteLinkResource, "/group/<name>/invite/<invited_user>")
350+
api.add_resource(JoinGroupInviteLinkResource, "/group/join")
349351

350352
# OAuth endpoints
351353
if app_config.mwdb.enable_oidc:

mwdb/model/user.py

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -209,14 +209,19 @@ def generate_group_invite_token(self, group_id, inviter):
209209
inviter=inviter,
210210
)
211211

212-
@staticmethod
213-
def verify_group_invite_token(token):
214-
result = User._verify_token(
215-
token=token,
216-
fields=[],
217-
scope=AuthScope.group_invite,
218-
)
219-
return None if result is None else result[0]
212+
def join_group_with_token(self, token):
213+
data = verify_token(token, AuthScope.group_invite)
214+
215+
if data is None:
216+
return False
217+
218+
group_id = data.get("group_id")
219+
if group_id is None:
220+
return False
221+
222+
group_obj = db.session.query(Group).filter(Group.id == group_id).first()
223+
224+
return group_obj.add_member(self)
220225

221226
@staticmethod
222227
def verify_session_token(token) -> Optional[Tuple["User", Optional[str]]]:

mwdb/resources/group.py

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -690,6 +690,8 @@ def post(self, name, invited_user):
690690
" not configured or unavailable."
691691
)
692692

693+
return token
694+
693695

694696
@rate_limited_resource
695697
class JoinGroupInviteLinkResource(Resource):
@@ -703,17 +705,24 @@ def post(selt):
703705
704706
security:
705707
- bearerAuth: []
708+
parameters:
709+
- in: query
710+
name: token
711+
schema:
712+
type: string
713+
description: token
706714
tags:
707715
- group
708716
responses:
709717
200:
710718
description: When user joined group successfully
719+
content:
720+
application/json:
721+
schema: GroupSuccessResponseSchema
711722
400:
712723
description: When request body is invalid
713724
403:
714725
description: When there was a problem with the token
715-
409:
716-
description: When user is already a member of this group
717726
503:
718727
description: |
719728
Request canceled due to database statement timeout.
@@ -723,7 +732,8 @@ def post(selt):
723732
if token is None:
724733
raise Forbidden("Token not found")
725734

726-
invite_data = User.verify_group_invite_token(token)
735+
success = g.auth_user.join_group_with_token(token)
727736

728-
if invite_data is None:
729-
raise Forbidden("There was a problem while decoding your token")
737+
if not success:
738+
raise Forbidden("There was a problem while processing your request")
739+
db.session.commit()

mwdb/templates/mail/invitation.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@ Hi {login}
22

33
You have been invited to join new group.
44

5-
To view the invitation click this link: {base_url}/.../?token={group_invite_token}
5+
To view the invitation click this link: {base_url}/group/join/?token={group_invite_token}

mwdb/web/src/commons/api/index.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -412,8 +412,8 @@ function setGroupAdmin(
412412
return axios.put(`/group/${name}/member/${member}`, { group_admin });
413413
}
414414

415-
function requestGroupInviteLink(name: string, invited_user: string){
416-
return axios.post(`/group/${name}/invite/${invited_user}`)
415+
function requestGroupInviteLink(name: string, invited_user: string) {
416+
return axios.post(`/group/${name}/invite/${invited_user}`);
417417
}
418418

419419
function getUsers(): GetUsersResponse {

0 commit comments

Comments
 (0)