예제 #1
0
파일: team.py 프로젝트: EasyCTF/OpenCTF
def team_edit():
	params = utils.flat_multi(request.form)
	_user = user.get_user().first()
	_team = get_team(tid=_user.tid).first()
	if _user.uid != _team.owner:
		raise WebException("You must be the captain of your team to edit information!")

	with app.app_context():
		update = {}
		if params.get("new_teamname") is not None:
			if get_team(teamname_lower=utils.escape_teamname(params["new_teamname"])).first() is not None:
				raise WebException("This team name is taken!")
			update["teamname"] = params["new_teamname"]
			update["teamname_lower"] = utils.escape_teamname(params["new_teamname"])
		if params.get("new_school") is not None:
			update["school"] = params["new_school"]
		_team.update_info(update)

	return { "success": 1 }
예제 #2
0
파일: team.py 프로젝트: EasyCTF/OpenCTF
def team_info():
	logged_in = user.is_logged_in()
	my_team = -1
	in_team = False
	owner = False
	_user = None
	teamdata = { }
	search = { }
	teamname = utils.flat_multi(request.args).get("teamname")
	if teamname:
		search.update({ "teamname_lower": utils.escape_teamname(teamname) })
	if logged_in:
		_user = user.get_user().first()
		if user.in_team(_user):
			my_team = _user.tid
			if "teamname_lower" not in search:
				search.update({ "tid": _user.tid })
				in_team = True
	if bool(search) != False:
		team = get_team(**search).first()
		teamdata = get_team_info(**search)
		if logged_in:
			in_team = teamdata["tid"] == _user.tid
			owner = teamdata["captain"] == _user.uid
		teamdata["in_team"] = in_team
		teamdata["my_team"] = my_team
		if in_team:
			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
		teamdata["activity"] = team.get_activity()
	else:
		if logged_in:
			teamdata["invitations"] = _user.get_invitations()
			teamdata["my_team"] = my_team
			teamdata["tid"] = -1
			teamdata["activity"] = []
		else:
			# Non-logged-in user viewing /team page
			raise WebException()
	return { "success": 1, "team": teamdata }
예제 #3
0
파일: models.py 프로젝트: EasyCTF/OpenCTF
	def __init__(self, teamname, school, owner, observer):
		self.teamname = teamname
		self.teamname_lower = utils.escape_teamname(teamname)
		self.school = school
		self.owner = owner
		self.observer = observer
예제 #4
0
파일: team.py 프로젝트: EasyCTF/OpenCTF
	with app.app_context():
		if _user.uid == _team.owner:
			_team.remove_all_members()
		else:
			_team.remove_member(_user.uid)
			db.session.add(Activity(_user.uid, 2, tid=_team.tid, pid=-1))
		db.session.delete(_team)
		db.session.commit()
		db.session.close()
	return { "success": 1 }

##################
# TEAM FUNCTIONS #
##################

__check_teamname = lambda teamname: get_team(teamname_lower=utils.escape_teamname(teamname)).first() is None

TeamSchema = Schema({
	Required("teamname"): check(
		([str, Length(min=4, max=32)], "Your teamname should be between 4 and 32 characters long."),
		([__check_teamname], "This teamname is taken. Please choose a different one.")
	),
	Required("school"): check(
		([str, Length(min=4, max=40)], "Your school name should be between 4 and 40 characters long. Use abbreviations if necessary."),
	),
}, extra=True)

def get_team_info(tid=None, teamname=None, teamname_lower=None, owner=None):
	team = get_team(tid=tid, teamname=teamname, teamname_lower=teamname_lower, owner=owner).first()
	if team is None:
		raise WebException("Team not found.")