Ejemplo n.º 1
0
def token():
    configure_oauth()
    state = request.args['state']
    LOGGER.debug(f"State [{state}], _google_authlib_state_[{session.get('_google_authlib_state_')}]")
    LOGGER.debug(session)
    session['_google_authlib_state_'] = state
    _token = oauth.google.authorize_access_token()
    google_user = oauth.google.parse_id_token(_token)
    LOGGER.debug(f" Google User {google_user}")
    username = google_user['name'].replace(' ', '').lower()
    LOGGER.debug(f" Google User Name {username}")
    user = User.query.filter_by(email=google_user['email']).first()
    _password = "******"
    if not user:
        user = User.query.filter_by(username=username).first()
        if user:
            LOGGER.debug(f" Username {username} already exists. Using email as username.")
            username = google_user['email']
        user = User(email=google_user['email'],
                    username=username,
                    password=_password,
                    login_type=LoginType.GOOGLE)
        db.session.add(user)
        db.session.commit()
    access_token = issue_token_for_user(user)
    LOGGER.debug(f'Access token {access_token}')

    return jsonify({**user.to_json(), 'access_token': access_token}), 200
Ejemplo n.º 2
0
def register():
    """
        Signin by POST credentials or UsernamePassword GET.
        ---
        definitions:
          - schema:
              id: RegisterRequest
              properties:
                username:
                 type: string
                 description: username
                password:
                  type: string
                  description: password
                email:
                  type: string
                  description: email

        parameters:
            - in: body
              name: registerRequest
              required: true
              description: username and password
              schema:
                  $ref: "#/definitions/RegisterRequest"
        responses:
                200:
                    description: User profile including access token.
                    schema:
                        $ref: '#/definitions/LoginResponse'
                401:
                    description: Invalid username or password.
    """

    _request = from_json(request.data.decode('utf-8'))
    if User.query.filter_by(username=_request['username']).first():
        return jsonify('User already registered'), 400
    user = User(email=_request['email'],
                username=_request['username'],
                password=_request['password'])
    user.role = Role.query.filter_by(default=True).first()

    db.session.add(user)
    db.session.commit()
    access_token = issue_token_for_user(user)
    return jsonify({**user.to_json(), 'access_token': access_token}), 200