From e38ddd1b8ca04a789224060472f486e758033b49 Mon Sep 17 00:00:00 2001 From: Michael Zhang Date: Sat, 16 Jan 2016 20:23:34 -0600 Subject: [PATCH] more team changes --- server/api/models.py | 19 +++++++++++++++ server/api/team.py | 54 ++++++++++++++++++++++++++++++++++++++++++ web/js/easyctf.js | 20 ++++++++++++++++ web/pages/profile.html | 2 +- web/pages/team.html | 18 ++++++++++++-- 5 files changed, 110 insertions(+), 3 deletions(-) diff --git a/server/api/models.py b/server/api/models.py index 62a537f..beb2311 100644 --- a/server/api/models.py +++ b/server/api/models.py @@ -73,6 +73,25 @@ class Teams(db.Model): except ValueError: return (-1, "--") + def get_invitation_requests(self, frid=None): + if frid is not None: + req = db.session.query(TeamInvitations).filter_by(rtype=1, frid=frid, toid=self.tid).first() + if req is None: + return None + else: + user = db.session.query(Users).filter_by(uid=req.frid).first() + return { "username": user.username, "name": user.name, "uid": user.uid } + result = [ ] + requests = db.session.query(TeamInvitations).filter_by(rtype=1, toid=self.tid).all() + for req in requests: + user = db.session.query(Users).filter_by(uid=req.frid).first() + result.append({ + "username": user.username, + "name": user.name, + "uid": user.uid + }) + return result + def get_pending_invitations(self, toid=None): if toid is not None: invitation = db.session.query(TeamInvitations).filter_by(rtype=0, frid=self.tid, toid=toid).first() diff --git a/server/api/team.py b/server/api/team.py index ffcfdab..219c8c9 100644 --- a/server/api/team.py +++ b/server/api/team.py @@ -68,6 +68,55 @@ def team_invite(): return { "success": 1, "message": "Success!" } +@blueprint.route("/invite/rescind", methods=["POST"]) +@api_wrapper +@login_required +def team_invite_rescind(): + params = utils.flat_multi(request.form) + _user = user.get_user().first() + if not user.in_team(_user): + raise WebException("You must be in a team!") + _team = get_team(tid=_user.tid).first() + if _user.uid != _team.owner: + raise WebException("You must be the captain of your team to rescind invitations!") + + uid = params.get("uid") + if uid is None: + raise WebException("Please provide a user.") + invitation = TeamInvitations.query.filter_by(rtype=0, frid=_team.tid, toid=uid).first() + if invitation is None: + raise WebException("Invitation doesn't exist.") + + with app.app_context(): + db.session.delete(invitation) + db.session.commit() + + return { "success": 1, "message": "Success!" } + +@blueprint.route("/invite/request", methods=["POST"]) +@api_wrapper +@login_required +def team_invite_request(): + params = utils.flat_multi(request.form) + _user = user.get_user().first() + if user.in_team(_user): + raise WebException("You're already in a team!") + + tid = params.get("tid") + _team = get_team(tid=tid).first() + if _team is None: + raise WebException("Team not found.") + + if _team.get_invitation_requests(frid=_user.uid) is not None: + raise WebException("You've already requested to join this team!") + + req = TeamInvitations(1, _user.uid, _team.tid) + with app.app_context(): + db.session.add(req) + db.session.commit() + + return { "success": 1, "message": "Success!" } + @blueprint.route("/info", methods=["GET"]) @api_wrapper def team_info(): @@ -95,6 +144,11 @@ def team_info(): teamdata["is_owner"] = owner if owner: teamdata["pending_invitations"] = team.get_pending_invitations() + teamdata["invitation_requests"] = team.get_invitation_requests() + else: + if logged_in: + teamdata["invited"] = team.get_pending_invitations(toid=_user.uid) is not None + teamdata["requested"] = team.get_invitation_requests(frid=_user.uid) is not None return { "success": 1, "team": teamdata } ################## diff --git a/web/js/easyctf.js b/web/js/easyctf.js index 89190d3..24d890c 100644 --- a/web/js/easyctf.js +++ b/web/js/easyctf.js @@ -250,4 +250,24 @@ var add_member = function() { location.reload(true); } }); +}; + +var rescind_invitation = function(uid) { + var input = "#add_member input"; + var data = { "uid": uid }; + api_call("POST", "/api/team/invite/rescind", data, function(result) { + if (result["success"] == 1) { + location.reload(true); + } + }); +}; + +var request_invitation = function(tid) { + var input = "#add_member input"; + var data = { "tid": tid }; + api_call("POST", "/api/team/invite/request", data, function(result) { + if (result["success"] == 1) { + location.reload(true); + } + }); }; \ No newline at end of file diff --git a/web/pages/profile.html b/web/pages/profile.html index a812708..02c4b87 100644 --- a/web/pages/profile.html +++ b/web/pages/profile.html @@ -42,7 +42,7 @@ - + diff --git a/web/pages/team.html b/web/pages/team.html index 5f0b3d9..72ca755 100644 --- a/web/pages/team.html +++ b/web/pages/team.html @@ -46,7 +46,7 @@
Team Name{{ user.team['teamname'] }}{{ user.team['teamname'] }}
School