-
Notifications
You must be signed in to change notification settings - Fork 0
/
team_utils.py
60 lines (50 loc) · 1.77 KB
/
team_utils.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import json
import log_utils as lu
import server_utils as su
def logOutTeam(factory, team_id):
if team_id is not None:
factory.teams[team_id].logOut()
lu.writeToLog(factory, 'Team ' + team_id + ' logged out.')
def denyTeam(protocol, reason):
'''
Close connection with user for given reason
'''
writeToTeam(protocol, {
'type': 'response',
'result': 'error',
'msg': reason
})
protocol.transport.loseConnection()
def writeToTeam(protocol, message, verbose=True):
'''
Writes to the team assigned to this protocol, and logs the message.
:param dict message
'''
try:
team_id = protocol.factory.protocols[protocol]
lu.writeToLogToTeam(protocol.factory, json.dumps(message), team_id, verbose=verbose)
protocol.sendString(json.dumps(message).encode())
return True
except:
return False
def processAuthentication(protocol, message):
'''
Run all logic for authenticating and 'logging in' a user.
'''
if not su.hasattrs(protocol, message, ['team_id', 'password']): return
team_id, password = message["team_id"], message["password"]
# Unsuccessful authentication
if team_id not in protocol.factory.teams:
denyTeam(protocol, 'Team {} not found'.format(team_id))
elif bool(protocol.factory.teams[team_id].isLoggedIn()):
denyTeam(protocol, 'Team {} is already logged in.'.format(team_id))
elif not protocol.factory.teams[team_id].tryLogin(password, protocol):
denyTeam(protocol, 'Password error.')
# Successful authentication
else:
protocol.factory.protocols[protocol] = team_id
writeToTeam(protocol, {
'type': 'response',
'result': 'success',
'msg': None
})