def client_new():
    """Create new client."""
    data, errors = ClientSchema().load(request.get_json())

    if errors:
        return jsonify({"errors": errors}), 400

    c = Client(user_id=current_user.get_id())
    c.gen_salt()
    c.name = data.get("name")
    c.description = data.get("description")
    c.website = data.get("website")
    c._redirect_uris = '\n'.join(data.get("redirect_uris"))
    c.is_confidential = data.get("is_confidential")
    db.session.add(c)
    db.session.commit()

    return jsonify(
        {
            'client_id': c.client_id,
            'client_secret': c.client_secret,
            'client_type': c.client_type,
            'default_redirect_uri': c.default_redirect_uri,
            'default_scopes': c.default_scopes,
            'description': c.description,
            'is_confidential': c.is_confidential,
            'is_internal': c.is_internal,
            'name': c.name,
            'oauth2tokens': c.oauth2tokens,
            'redirect_uris': c.redirect_uris,
            'user_id': c.user_id,
            'website': c.website,
        }), 200
Ejemplo n.º 2
0
def init_oauth_token():
    ds = current_app.extensions["invenio-accounts"].datastore
    user = ds.user_model.query.filter_by(email="*****@*****.**").one()
    with db.session.begin_nested():
        client = Client(
            name="admin",
            user_id=user.id,
            is_internal=True,
            is_confidential=False,
            _default_scopes="",
        )
        client.gen_salt()

        token = Token(
            client_id=client.client_id,
            user_id=user.id,
            access_token=current_app.config["AUTHENTICATION_TOKEN"],
            expires=None,
            _scopes="",
            is_personal=True,
            is_internal=True,
        )

        db.session.add(client)
        db.session.add(token)
    db.session.commit()
    click.secho("Authentication token generated successfully", fg="green")
Ejemplo n.º 3
0
def client_new():
    """Create new client."""
    data, errors = ClientSchema().load(request.get_json())

    if errors:
        return jsonify({"errors": errors}), 400

    c = Client(user_id=current_user.get_id())
    c.gen_salt()
    c.name = data.get("name")
    c.description = data.get("description")
    c.website = data.get("website")
    c._redirect_uris = '\n'.join(data.get("redirect_uris"))
    c.is_confidential = data.get("is_confidential")
    db.session.add(c)
    db.session.commit()

    return jsonify({
        'client_id': c.client_id,
        'client_secret': c.client_secret,
        'client_type': c.client_type,
        'default_redirect_uri': c.default_redirect_uri,
        'default_scopes': c.default_scopes,
        'description': c.description,
        'is_confidential': c.is_confidential,
        'is_internal': c.is_internal,
        'name': c.name,
        'oauth2tokens': c.oauth2tokens,
        'redirect_uris': c.redirect_uris,
        'user_id': c.user_id,
        'website': c.website,
    }), 200
def test_client_salt(provider_fixture):
    app = provider_fixture
    with app.app_context():
        with db.session.begin_nested():
            client = Client(name="Test something", is_confidential=True, user_id=1)

            client.gen_salt()
            assert len(client.client_id) == app.config["OAUTH2SERVER_CLIENT_ID_SALT_LEN"]
            assert len(client.client_secret) == app.config["OAUTH2SERVER_CLIENT_SECRET_SALT_LEN"]

            db.session.add(client)

        with db.session.begin_nested():
            db.session.delete(client)
Ejemplo n.º 5
0
def create_personal(name,
                    user_id,
                    scopes=None,
                    is_internal=False,
                    access_token=None):
    """Create a personal access token.

    A token that is bound to a specific user and which doesn't expire, i.e.
    similar to the concept of an API key.

    :param name: Client name.
    :param user_id: User ID.
    :param scopes: The list of permitted scopes. (Default: ``None``)
    :param is_internal: If ``True`` it's a internal access token.
            (Default: ``False``)
    :param access_token: personalized access_token.
    :returns: A new access token.
    """
    with db.session.begin_nested():
        scopes = " ".join(scopes) if scopes else ""

        client = Client(name=name,
                        user_id=user_id,
                        is_internal=True,
                        is_confidential=False,
                        _default_scopes=scopes)
        client.gen_salt()

        if not access_token:
            access_token = gen_salt(
                current_app.config.get('OAUTH2SERVER_TOKEN_PERSONAL_SALT_LEN'))
        token = Token(
            client_id=client.client_id,
            user_id=user_id,
            access_token=access_token,
            expires=None,
            _scopes=scopes,
            is_personal=True,
            is_internal=is_internal,
        )

        db.session.add(client)
        db.session.add(token)

    return token
Ejemplo n.º 6
0
    def test_client_salt(self):
        from invenio_oauth2server.models import Client

        c = Client(
            name='Test something',
            is_confidential=True,
            user_id=1,
        )

        c.gen_salt()
        assert len(c.client_id) == \
            self.app.config.get('OAUTH2_CLIENT_ID_SALT_LEN')
        assert len(c.client_secret) == \
            self.app.config.get('OAUTH2_CLIENT_SECRET_SALT_LEN')

        db.session.add(c)
        db.session.commit()

        self.delete_objects([c])
Ejemplo n.º 7
0
    def test_client_salt(self):
        from invenio_oauth2server.models import Client

        c = Client(
            name='Test something',
            is_confidential=True,
            user_id=1,
        )

        c.gen_salt()
        assert len(c.client_id) == \
            self.app.config.get('OAUTH2_CLIENT_ID_SALT_LEN')
        assert len(c.client_secret) == \
            self.app.config.get('OAUTH2_CLIENT_SECRET_SALT_LEN')

        db.session.add(c)
        db.session.commit()

        self.delete_objects([c])
Ejemplo n.º 8
0
def test_client_salt(provider_fixture):
    app = provider_fixture
    with app.app_context():
        with db.session.begin_nested():
            client = Client(
                name='Test something',
                is_confidential=True,
                user_id=1,
            )

            client.gen_salt()
            assert len(client.client_id) == \
                app.config['OAUTH2SERVER_CLIENT_ID_SALT_LEN']
            assert len(client.client_secret) == \
                app.config['OAUTH2SERVER_CLIENT_SECRET_SALT_LEN']

            db.session.add(client)

        with db.session.begin_nested():
            db.session.delete(client)
Ejemplo n.º 9
0
def create_user_token(client_name, user, access_token):
    """Create a token for the given user."""
    # Create token for user
    with db.session.begin_nested():
        client = Client(name=client_name,
                        user_id=user.id,
                        is_internal=True,
                        is_confidential=False,
                        _default_scopes='')
        client.gen_salt()
        token = Token(client_id=client.client_id,
                      user_id=user.id,
                      access_token=access_token,
                      expires=None,
                      is_personal=True,
                      is_internal=True,
                      _scopes='')
        db.session.add(client)
        db.session.add(token)
    return token
Ejemplo n.º 10
0
def init_authentication_token():
    with db.session.begin_nested():
        client = Client(name='admin',
                        user_id=1,
                        is_internal=True,
                        is_confidential=False,
                        _default_scopes="")
        client.gen_salt()

        token = Token(
            client_id=client.client_id,
            user_id=1,
            access_token=current_app.config["AUTHENTICATION_TOKEN"],
            expires=None,
            _scopes="",
            is_personal=True,
            is_internal=True,
        )

        db.session.add(client)
        db.session.add(token)
    db.session.commit()
Ejemplo n.º 11
0
def init_authentication_token():
    with db.session.begin_nested():
        client = Client(
            name='admin',
            user_id=1,
            is_internal=True,
            is_confidential=False,
            _default_scopes=""
        )
        client.gen_salt()

        token = Token(
            client_id=client.client_id,
            user_id=1,
            access_token=current_app.config["AUTHENTICATION_TOKEN"],
            expires=None,
            _scopes="",
            is_personal=True,
            is_internal=True,
        )

        db.session.add(client)
        db.session.add(token)
    db.session.commit()