Move RoomPasswordProvider to utils
This commit is contained in:
parent
a28431340e
commit
778fb21d0b
@ -12,6 +12,7 @@ import codecs
|
|||||||
import os
|
import os
|
||||||
from string import Template
|
from string import Template
|
||||||
import argparse
|
import argparse
|
||||||
|
from syncplay.utils import RoomPasswordProvider, NotControlledRoom
|
||||||
|
|
||||||
class SyncFactory(Factory):
|
class SyncFactory(Factory):
|
||||||
def __init__(self, password='', motdFilePath=None, isolateRooms=False):
|
def __init__(self, password='', motdFilePath=None, isolateRooms=False):
|
||||||
@ -417,36 +418,3 @@ class ConfigurationGetter(object):
|
|||||||
self._argparser.add_argument('--password', metavar='password', type=str, nargs='?', help=getMessage("server-password-argument"))
|
self._argparser.add_argument('--password', metavar='password', type=str, nargs='?', help=getMessage("server-password-argument"))
|
||||||
self._argparser.add_argument('--isolate-rooms', action='store_true', help=getMessage("server-isolate-room-argument"))
|
self._argparser.add_argument('--isolate-rooms', action='store_true', help=getMessage("server-isolate-room-argument"))
|
||||||
self._argparser.add_argument('--motd-file', metavar='file', type=str, nargs='?', help=getMessage("server-motd-argument"))
|
self._argparser.add_argument('--motd-file', metavar='file', type=str, nargs='?', help=getMessage("server-motd-argument"))
|
||||||
|
|
||||||
class RoomPasswordProvider(object):
|
|
||||||
CONTROLLED_ROOM_REGEX = re.compile("^\+(.*):(\w{12})$")
|
|
||||||
PASSWORD_REGEX = re.compile("[A-Z]{2}-\d{3}-\d{3}")
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def isControlledRoom(roomName):
|
|
||||||
return bool(re.match(RoomPasswordProvider.CONTROLLED_ROOM_REGEX, roomName))
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def check(roomName, password, salt):
|
|
||||||
if not re.match(RoomPasswordProvider.PASSWORD_REGEX, password):
|
|
||||||
raise ValueError()
|
|
||||||
|
|
||||||
match = re.match(RoomPasswordProvider.CONTROLLED_ROOM_REGEX, roomName)
|
|
||||||
if not match:
|
|
||||||
raise NotControlledRoom()
|
|
||||||
roomHash = match.group(2)
|
|
||||||
computedHash = RoomPasswordProvider._computeRoomHash(match.group(1), password, salt)
|
|
||||||
return roomHash == computedHash
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def getControlledRoomName(roomName, password, salt):
|
|
||||||
return "+" + roomName + ":" + RoomPasswordProvider._computeRoomHash(roomName, password, salt)
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def _computeRoomHash(roomName, password, salt):
|
|
||||||
salt = hashlib.sha256(salt).hexdigest()
|
|
||||||
provisionalHash = hashlib.sha256(roomName + salt).hexdigest()
|
|
||||||
return hashlib.sha1(provisionalHash + salt + password).hexdigest()[:12].upper()
|
|
||||||
|
|
||||||
class NotControlledRoom(Exception):
|
|
||||||
pass
|
|
||||||
@ -182,3 +182,36 @@ def sameFileduration (duration1, duration2):
|
|||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
class RoomPasswordProvider(object):
|
||||||
|
CONTROLLED_ROOM_REGEX = re.compile("^\+(.*):(\w{12})$")
|
||||||
|
PASSWORD_REGEX = re.compile("[A-Z]{2}-\d{3}-\d{3}")
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def isControlledRoom(roomName):
|
||||||
|
return bool(re.match(RoomPasswordProvider.CONTROLLED_ROOM_REGEX, roomName))
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def check(roomName, password, salt):
|
||||||
|
if not re.match(RoomPasswordProvider.PASSWORD_REGEX, password):
|
||||||
|
raise ValueError()
|
||||||
|
|
||||||
|
match = re.match(RoomPasswordProvider.CONTROLLED_ROOM_REGEX, roomName)
|
||||||
|
if not match:
|
||||||
|
raise NotControlledRoom()
|
||||||
|
roomHash = match.group(2)
|
||||||
|
computedHash = RoomPasswordProvider._computeRoomHash(match.group(1), password, salt)
|
||||||
|
return roomHash == computedHash
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def getControlledRoomName(roomName, password, salt):
|
||||||
|
return "+" + roomName + ":" + RoomPasswordProvider._computeRoomHash(roomName, password, salt)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _computeRoomHash(roomName, password, salt):
|
||||||
|
salt = hashlib.sha256(salt).hexdigest()
|
||||||
|
provisionalHash = hashlib.sha256(roomName + salt).hexdigest()
|
||||||
|
return hashlib.sha1(provisionalHash + salt + password).hexdigest()[:12].upper()
|
||||||
|
|
||||||
|
class NotControlledRoom(Exception):
|
||||||
|
pass
|
||||||
Loading…
x
Reference in New Issue
Block a user