def get_new_id(): return get_new_identifier(Order)
class RocketChat: api_url: str @property def login_url(self) -> str: return self.api_url + '/api/v1/login' def login(self, user: User, event: Optional[Event] = None, method: str = 'login'): def save_token(token): user.rocket_chat_token = token db.session.add(user) db.session.commit() res = requests.post( self.login_url, json=dict(email=user.email, password=user.rocket_chat_password), ) data = res.json() if res.status_code == 200: token = data['data']['authToken'] save_token(token) if event: self.add_in_room(event, data['data']['userId']) return dict(method=method, token=token, res=data) else: # Unhandled Case logger.error('Error while rocket chat login: %s', data) raise RocketChatException('Error while logging in', response=res) def register( self, user: User, event: Optional[Event] = None, username_suffix='', ): settings = get_settings() register_url = self.api_url + '/api/v1/users.register' register_data = { 'name': user.public_name or user.full_name, 'email': user.email, 'pass': user.rocket_chat_password, 'username': user.rocket_chat_username + username_suffix, } if registration_secret := settings['rocket_chat_registration_secret']: register_data['secretURL'] = registration_secret res = requests.post(register_url, json=register_data) data = res.json() if res.status_code == 200: return self.login(user, event, 'registered') elif res.status_code == 400: if data.get('error') == 'Username is already in use': # Username conflict. Add random suffix and retry return self.register(user, event, '.' + get_new_identifier(length=5)) logger.info('Bad Request during register: %s', data) # Probably already registered. Try logging in return self.login(user, event, 'login') else: logger.error( 'Error while rocket chat registration: %d %s', res.status_code, data, ) raise RocketChatException('Error while registration', response=res)
def get_new_event_identifier(length=8): return get_new_identifier(Event, length=length)
def get_new_id(): return get_new_identifier(EventInvoice)