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());
}
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());
}
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));
}
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));
});
}
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));
});
}
Aggregations