Beispiel #1
0
def get_new_id():
    return get_new_identifier(Order)
Beispiel #2
0
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)
Beispiel #3
0
def get_new_event_identifier(length=8):
    return get_new_identifier(Event, length=length)
def get_new_id():
    return get_new_identifier(EventInvoice)