Search in sources :

Example 6 with Scope

use of org.opendaylight.yang.gen.v1.urn.sal.restconf.event.subscription.rev140708.CreateDataChangeEventSubscriptionInput1.Scope in project gravitee-access-management by gravitee-io.

the class JdbcScopeRepository method update.

@Override
public Single<Scope> update(Scope item) {
    LOGGER.debug("Update Scope with id {}", item.getId());
    TransactionalOperator trx = TransactionalOperator.create(tm);
    Mono<Integer> deleteClaims = template.delete(JdbcScope.Claims.class).matching(Query.query(where("scope_id").is(item.getId()))).all();
    DatabaseClient.GenericExecuteSpec update = template.getDatabaseClient().sql(UPDATE_STATEMENT);
    update = addQuotedField(update, COL_ID, item.getId(), String.class);
    update = addQuotedField(update, COL_NAME, item.getName(), String.class);
    update = addQuotedField(update, COL_DOMAIN, item.getDomain(), String.class);
    update = addQuotedField(update, COL_DESCRIPTION, item.getDescription(), String.class);
    update = addQuotedField(update, COL_EXPIRES_IN, item.getExpiresIn(), Integer.class);
    update = addQuotedField(update, COL_ICON_URI, item.getIconUri(), String.class);
    update = addQuotedField(update, COL_KEY, item.getKey(), String.class);
    update = addQuotedField(update, COL_DISCOVERY, item.isDiscovery(), Boolean.class);
    update = addQuotedField(update, COL_PARAMETERIZED, item.isParameterized(), Boolean.class);
    update = addQuotedField(update, COL_SYSTEM, item.isSystem(), Boolean.class);
    update = addQuotedField(update, COL_CREATED_AT, dateConverter.convertTo(item.getCreatedAt(), null), LocalDateTime.class);
    update = addQuotedField(update, COL_UPDATED_AT, dateConverter.convertTo(item.getUpdatedAt(), null), LocalDateTime.class);
    Mono<Integer> action = update.fetch().rowsUpdated();
    final List<String> scopeClaims = item.getClaims();
    if (scopeClaims != null && !scopeClaims.isEmpty()) {
        action = action.then(Flux.fromIterable(scopeClaims).concatMap(claim -> insertClaim(claim, item)).reduce(Integer::sum));
    }
    return monoToSingle(deleteClaims.then(action).as(trx::transactional)).flatMap((i) -> this.findById(item.getId()).toSingle());
}
Also used : TransactionalOperator(org.springframework.transaction.reactive.TransactionalOperator) LocalDateTime(java.time.LocalDateTime) Completable(io.reactivex.Completable) Maybe(io.reactivex.Maybe) Query(org.springframework.data.relational.core.query.Query) LocalDateTime(java.time.LocalDateTime) Autowired(org.springframework.beans.factory.annotation.Autowired) Criteria.where(org.springframework.data.relational.core.query.Criteria.where) Single(io.reactivex.Single) InitializingBean(org.springframework.beans.factory.InitializingBean) DatabaseClient(org.springframework.r2dbc.core.DatabaseClient) SpringScopeClaimRepository(io.gravitee.am.repository.jdbc.management.api.spring.scope.SpringScopeClaimRepository) AbstractJdbcRepository(io.gravitee.am.repository.jdbc.management.AbstractJdbcRepository) Flowable(io.reactivex.Flowable) Sort(org.springframework.data.domain.Sort) JdbcScope(io.gravitee.am.repository.jdbc.management.api.model.JdbcScope) Repository(org.springframework.stereotype.Repository) Scope(io.gravitee.am.model.oauth2.Scope) Page(io.gravitee.am.model.common.Page) CriteriaDefinition.from(org.springframework.data.relational.core.query.CriteriaDefinition.from) TransactionalOperator(org.springframework.transaction.reactive.TransactionalOperator) PageRequest(org.springframework.data.domain.PageRequest) Mono(reactor.core.publisher.Mono) ScopeRepository(io.gravitee.am.repository.management.api.ScopeRepository) RandomString(io.gravitee.am.common.utils.RandomString) SpringScopeRepository(io.gravitee.am.repository.jdbc.management.api.spring.scope.SpringScopeRepository) Flux(reactor.core.publisher.Flux) List(java.util.List) RxJava2Adapter(reactor.adapter.rxjava.RxJava2Adapter) SqlIdentifier(org.springframework.data.relational.core.sql.SqlIdentifier) DatabaseClient(org.springframework.r2dbc.core.DatabaseClient) JdbcScope(io.gravitee.am.repository.jdbc.management.api.model.JdbcScope) RandomString(io.gravitee.am.common.utils.RandomString)

Example 7 with Scope

use of org.opendaylight.yang.gen.v1.urn.sal.restconf.event.subscription.rev140708.CreateDataChangeEventSubscriptionInput1.Scope in project gravitee-access-management by gravitee-io.

the class JdbcScopeRepository method create.

@Override
public Single<Scope> create(Scope item) {
    item.setId(item.getId() == null ? RandomString.generate() : item.getId());
    LOGGER.debug("Create Scope with id {}", item.getId());
    TransactionalOperator trx = TransactionalOperator.create(tm);
    DatabaseClient.GenericExecuteSpec insertSpec = template.getDatabaseClient().sql(INSERT_STATEMENT);
    insertSpec = addQuotedField(insertSpec, COL_ID, item.getId(), String.class);
    insertSpec = addQuotedField(insertSpec, COL_NAME, item.getName(), String.class);
    insertSpec = addQuotedField(insertSpec, COL_DOMAIN, item.getDomain(), String.class);
    insertSpec = addQuotedField(insertSpec, COL_DESCRIPTION, item.getDescription(), String.class);
    insertSpec = addQuotedField(insertSpec, COL_EXPIRES_IN, item.getExpiresIn(), Integer.class);
    insertSpec = addQuotedField(insertSpec, COL_ICON_URI, item.getIconUri(), String.class);
    insertSpec = addQuotedField(insertSpec, COL_KEY, item.getKey(), String.class);
    insertSpec = addQuotedField(insertSpec, COL_DISCOVERY, item.isDiscovery(), Boolean.class);
    insertSpec = addQuotedField(insertSpec, COL_PARAMETERIZED, item.isParameterized(), Boolean.class);
    insertSpec = addQuotedField(insertSpec, COL_SYSTEM, item.isSystem(), Boolean.class);
    insertSpec = addQuotedField(insertSpec, COL_CREATED_AT, dateConverter.convertTo(item.getCreatedAt(), null), LocalDateTime.class);
    insertSpec = addQuotedField(insertSpec, COL_UPDATED_AT, dateConverter.convertTo(item.getUpdatedAt(), null), LocalDateTime.class);
    Mono<Integer> action = insertSpec.fetch().rowsUpdated();
    final List<String> scopeClaims = item.getClaims();
    if (scopeClaims != null && !scopeClaims.isEmpty()) {
        action = action.then(Flux.fromIterable(scopeClaims).concatMap(claim -> insertClaim(claim, item)).reduce(Integer::sum));
    }
    return monoToSingle(action.as(trx::transactional)).flatMap((i) -> this.findById(item.getId()).toSingle());
}
Also used : TransactionalOperator(org.springframework.transaction.reactive.TransactionalOperator) LocalDateTime(java.time.LocalDateTime) Completable(io.reactivex.Completable) Maybe(io.reactivex.Maybe) Query(org.springframework.data.relational.core.query.Query) LocalDateTime(java.time.LocalDateTime) Autowired(org.springframework.beans.factory.annotation.Autowired) Criteria.where(org.springframework.data.relational.core.query.Criteria.where) Single(io.reactivex.Single) InitializingBean(org.springframework.beans.factory.InitializingBean) DatabaseClient(org.springframework.r2dbc.core.DatabaseClient) SpringScopeClaimRepository(io.gravitee.am.repository.jdbc.management.api.spring.scope.SpringScopeClaimRepository) AbstractJdbcRepository(io.gravitee.am.repository.jdbc.management.AbstractJdbcRepository) Flowable(io.reactivex.Flowable) Sort(org.springframework.data.domain.Sort) JdbcScope(io.gravitee.am.repository.jdbc.management.api.model.JdbcScope) Repository(org.springframework.stereotype.Repository) Scope(io.gravitee.am.model.oauth2.Scope) Page(io.gravitee.am.model.common.Page) CriteriaDefinition.from(org.springframework.data.relational.core.query.CriteriaDefinition.from) TransactionalOperator(org.springframework.transaction.reactive.TransactionalOperator) PageRequest(org.springframework.data.domain.PageRequest) Mono(reactor.core.publisher.Mono) ScopeRepository(io.gravitee.am.repository.management.api.ScopeRepository) RandomString(io.gravitee.am.common.utils.RandomString) SpringScopeRepository(io.gravitee.am.repository.jdbc.management.api.spring.scope.SpringScopeRepository) Flux(reactor.core.publisher.Flux) List(java.util.List) RxJava2Adapter(reactor.adapter.rxjava.RxJava2Adapter) SqlIdentifier(org.springframework.data.relational.core.sql.SqlIdentifier) DatabaseClient(org.springframework.r2dbc.core.DatabaseClient) RandomString(io.gravitee.am.common.utils.RandomString)

Example 8 with Scope

use of org.opendaylight.yang.gen.v1.urn.sal.restconf.event.subscription.rev140708.CreateDataChangeEventSubscriptionInput1.Scope in project gravitee-access-management by gravitee-io.

the class MongoScopeRepository method findByDomain.

@Override
public Single<Page<Scope>> findByDomain(String domain, int page, int size) {
    Bson mongoQuery = eq(FIELD_DOMAIN, domain);
    Single<Long> countOperation = Observable.fromPublisher(scopesCollection.countDocuments(mongoQuery)).first(0l);
    Single<List<Scope>> scopesOperation = Observable.fromPublisher(scopesCollection.find(mongoQuery).skip(size * page).limit(size)).map(this::convert).toList();
    return Single.zip(countOperation, scopesOperation, (count, scope) -> new Page<Scope>(scope, page, count));
}
Also used : Scope(io.gravitee.am.model.oauth2.Scope) List(java.util.List) Bson(org.bson.conversions.Bson)

Example 9 with Scope

use of org.opendaylight.yang.gen.v1.urn.sal.restconf.event.subscription.rev140708.CreateDataChangeEventSubscriptionInput1.Scope in project gravitee-access-management by gravitee-io.

the class ScopeServiceImpl method create.

@Override
public Single<Scope> create(String domain, NewSystemScope newScope) {
    LOGGER.debug("Create a new system scope {} for domain {}", newScope, domain);
    String scopeKey = newScope.getKey().toLowerCase();
    return scopeRepository.findByDomainAndKey(domain, scopeKey).isEmpty().flatMap(empty -> {
        if (!empty) {
            throw new ScopeAlreadyExistsException(scopeKey, domain);
        }
        Scope scope = new Scope();
        scope.setId(RandomString.generate());
        scope.setDomain(domain);
        scope.setKey(scopeKey);
        scope.setSystem(true);
        scope.setClaims(newScope.getClaims());
        scope.setName(newScope.getName());
        scope.setDescription(newScope.getDescription());
        scope.setExpiresIn(newScope.getExpiresIn());
        scope.setDiscovery(newScope.isDiscovery());
        scope.setParameterized(false);
        scope.setCreatedAt(new Date());
        scope.setUpdatedAt(new Date());
        return scopeRepository.create(scope);
    }).flatMap(scope -> {
        // create event for sync process
        Event event = new Event(Type.SCOPE, new Payload(scope.getId(), ReferenceType.DOMAIN, scope.getDomain(), Action.CREATE));
        return eventService.create(event).flatMap(__ -> Single.just(scope));
    }).onErrorResumeNext(ex -> {
        if (ex instanceof AbstractManagementException) {
            return Single.error(ex);
        }
        LOGGER.error("An error occurs while trying to create a system scope", ex);
        return Single.error(new TechnicalManagementException("An error occurs while trying to create a system scope", ex));
    });
}
Also used : java.util(java.util) Completable(io.reactivex.Completable) Maybe(io.reactivex.Maybe) LoggerFactory(org.slf4j.LoggerFactory) Autowired(org.springframework.beans.factory.annotation.Autowired) Single(io.reactivex.Single) Event(io.gravitee.am.model.common.event.Event) Type(io.gravitee.am.common.event.Type) io.gravitee.am.service.exception(io.gravitee.am.service.exception) User(io.gravitee.am.identityprovider.api.User) AuditBuilder(io.gravitee.am.service.reporter.builder.AuditBuilder) ReferenceType(io.gravitee.am.model.ReferenceType) Observable(io.reactivex.Observable) URI(java.net.URI) Scope(io.gravitee.am.model.oauth2.Scope) io.gravitee.am.service(io.gravitee.am.service) Action(io.gravitee.am.common.event.Action) Page(io.gravitee.am.model.common.Page) Logger(org.slf4j.Logger) ApplicationOAuthSettings(io.gravitee.am.model.application.ApplicationOAuthSettings) MalformedURLException(java.net.MalformedURLException) ScopeRepository(io.gravitee.am.repository.management.api.ScopeRepository) EventType(io.gravitee.am.common.audit.EventType) Collectors(java.util.stream.Collectors) RandomString(io.gravitee.am.common.utils.RandomString) io.gravitee.am.service.model(io.gravitee.am.service.model) Component(org.springframework.stereotype.Component) Payload(io.gravitee.am.model.common.event.Payload) ApplicationScopeSettings(io.gravitee.am.model.application.ApplicationScopeSettings) ScopeAuditBuilder(io.gravitee.am.service.reporter.builder.management.ScopeAuditBuilder) Lazy(org.springframework.context.annotation.Lazy) ScopeApprovalRepository(io.gravitee.am.repository.oauth2.api.ScopeApprovalRepository) Scope(io.gravitee.am.model.oauth2.Scope) Event(io.gravitee.am.model.common.event.Event) Payload(io.gravitee.am.model.common.event.Payload) RandomString(io.gravitee.am.common.utils.RandomString)

Example 10 with Scope

use of org.opendaylight.yang.gen.v1.urn.sal.restconf.event.subscription.rev140708.CreateDataChangeEventSubscriptionInput1.Scope in project gravitee-access-management by gravitee-io.

the class ScopeServiceImpl method delete.

@Override
public Completable delete(String scopeId, boolean force, User principal) {
    LOGGER.debug("Delete scope {}", scopeId);
    return scopeRepository.findById(scopeId).switchIfEmpty(Maybe.error(new ScopeNotFoundException(scopeId))).flatMapSingle(scope -> {
        if (scope.isSystem() && !force) {
            throw new SystemScopeDeleteException(scopeId);
        }
        return Single.just(scope);
    }).flatMapCompletable(scope -> Completable.fromSingle(// 1_ Remove permissions from role
    roleService.findByDomain(scope.getDomain()).flatMapObservable(roles -> Observable.fromIterable(roles.stream().filter(role -> role.getOauthScopes() != null && role.getOauthScopes().contains(scope.getKey())).collect(Collectors.toList()))).flatMapSingle(role -> {
        role.getOauthScopes().remove(scope.getKey());
        UpdateRole updatedRole = new UpdateRole();
        updatedRole.setName(role.getName());
        updatedRole.setDescription(role.getDescription());
        updatedRole.setPermissions(role.getOauthScopes());
        // Save role
        return roleService.update(scope.getDomain(), role.getId(), updatedRole);
    }).toList()).andThen(// 2_ Remove scopes from application
    applicationService.findByDomain(scope.getDomain()).flatMapObservable(applications -> Observable.fromIterable(applications.stream().filter(application -> {
        if (application.getSettings() == null) {
            return false;
        }
        if (application.getSettings().getOauth() == null) {
            return false;
        }
        ApplicationOAuthSettings oAuthSettings = application.getSettings().getOauth();
        return oAuthSettings.getScopeSettings() != null && !oAuthSettings.getScopeSettings().stream().filter(s -> s.getScope().equals(scope.getKey())).findFirst().isEmpty();
    }).collect(Collectors.toList()))).flatMapSingle(application -> {
        // Remove scope from application
        final List<ApplicationScopeSettings> cleanScopes = application.getSettings().getOauth().getScopeSettings().stream().filter(s -> !s.getScope().equals(scope.getKey())).collect(Collectors.toList());
        application.getSettings().getOauth().setScopeSettings(cleanScopes);
        // Then update
        return applicationService.update(application);
    }).toList()).toCompletable().andThen(scopeApprovalRepository.deleteByDomainAndScopeKey(scope.getDomain(), scope.getKey())).andThen(scopeRepository.delete(scopeId)).andThen(Completable.fromSingle(eventService.create(new Event(Type.SCOPE, new Payload(scope.getId(), ReferenceType.DOMAIN, scope.getDomain(), Action.DELETE))))).doOnComplete(() -> auditService.report(AuditBuilder.builder(ScopeAuditBuilder.class).principal(principal).type(EventType.SCOPE_DELETED).scope(scope))).doOnError(throwable -> auditService.report(AuditBuilder.builder(ScopeAuditBuilder.class).principal(principal).type(EventType.SCOPE_DELETED).throwable(throwable)))).onErrorResumeNext(ex -> {
        if (ex instanceof AbstractManagementException) {
            return Completable.error(ex);
        }
        LOGGER.error("An error occurs while trying to delete scope: {}", scopeId, ex);
        return Completable.error(new TechnicalManagementException(String.format("An error occurs while trying to delete scope: %s", scopeId), ex));
    });
}
Also used : java.util(java.util) Completable(io.reactivex.Completable) Maybe(io.reactivex.Maybe) LoggerFactory(org.slf4j.LoggerFactory) Autowired(org.springframework.beans.factory.annotation.Autowired) Single(io.reactivex.Single) Event(io.gravitee.am.model.common.event.Event) Type(io.gravitee.am.common.event.Type) io.gravitee.am.service.exception(io.gravitee.am.service.exception) User(io.gravitee.am.identityprovider.api.User) AuditBuilder(io.gravitee.am.service.reporter.builder.AuditBuilder) ReferenceType(io.gravitee.am.model.ReferenceType) Observable(io.reactivex.Observable) URI(java.net.URI) Scope(io.gravitee.am.model.oauth2.Scope) io.gravitee.am.service(io.gravitee.am.service) Action(io.gravitee.am.common.event.Action) Page(io.gravitee.am.model.common.Page) Logger(org.slf4j.Logger) ApplicationOAuthSettings(io.gravitee.am.model.application.ApplicationOAuthSettings) MalformedURLException(java.net.MalformedURLException) ScopeRepository(io.gravitee.am.repository.management.api.ScopeRepository) EventType(io.gravitee.am.common.audit.EventType) Collectors(java.util.stream.Collectors) RandomString(io.gravitee.am.common.utils.RandomString) io.gravitee.am.service.model(io.gravitee.am.service.model) Component(org.springframework.stereotype.Component) Payload(io.gravitee.am.model.common.event.Payload) ApplicationScopeSettings(io.gravitee.am.model.application.ApplicationScopeSettings) ScopeAuditBuilder(io.gravitee.am.service.reporter.builder.management.ScopeAuditBuilder) Lazy(org.springframework.context.annotation.Lazy) ScopeApprovalRepository(io.gravitee.am.repository.oauth2.api.ScopeApprovalRepository) ApplicationOAuthSettings(io.gravitee.am.model.application.ApplicationOAuthSettings) ApplicationScopeSettings(io.gravitee.am.model.application.ApplicationScopeSettings) Event(io.gravitee.am.model.common.event.Event) Payload(io.gravitee.am.model.common.event.Payload) ScopeAuditBuilder(io.gravitee.am.service.reporter.builder.management.ScopeAuditBuilder)

Aggregations

Scope (io.gravitee.am.model.oauth2.Scope)63 Test (org.junit.Test)43 TestObserver (io.reactivex.observers.TestObserver)25 Event (io.gravitee.am.model.common.event.Event)16 Page (io.gravitee.am.model.common.Page)15 Domain (io.gravitee.am.model.Domain)10 NewScope (io.gravitee.am.service.model.NewScope)9 Autowired (org.springframework.beans.factory.annotation.Autowired)9 AbstractManagementTest (io.gravitee.am.repository.management.AbstractManagementTest)8 Maybe (io.reactivex.Maybe)8 Single (io.reactivex.Single)8 RandomString (io.gravitee.am.common.utils.RandomString)7 ScopeRepository (io.gravitee.am.repository.management.api.ScopeRepository)7 Completable (io.reactivex.Completable)7 JerseySpringTest (io.gravitee.am.management.handlers.management.api.JerseySpringTest)6 ApplicationOAuthSettings (io.gravitee.am.model.application.ApplicationOAuthSettings)6 Observable (io.reactivex.Observable)6 User (io.gravitee.am.identityprovider.api.User)5 ReferenceType (io.gravitee.am.model.ReferenceType)5 ApplicationScopeSettings (io.gravitee.am.model.application.ApplicationScopeSettings)5