/*
 * Copyright 2014 Red Hat, Inc.
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * and Apache License v2.0 which accompanies this distribution.
 *
 * The Eclipse Public License is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * The Apache License v2.0 is available at
 * http://www.opensource.org/licenses/apache2.0.php
 *
 * You may elect to redistribute this code under either of these licenses.
 */

package io.vertx.ext.auth.mongo.impl;

import io.vertx.core.AsyncResult;
import io.vertx.core.Future;
import io.vertx.core.Handler;
import io.vertx.core.impl.logging.Logger;
import io.vertx.core.impl.logging.LoggerFactory;
import io.vertx.core.json.JsonArray;
import io.vertx.core.json.JsonObject;
import io.vertx.ext.auth.User;
import io.vertx.ext.auth.authorization.PermissionBasedAuthorization;
import io.vertx.ext.auth.authorization.RoleBasedAuthorization;
import io.vertx.ext.auth.mongo.*;
import io.vertx.ext.mongo.MongoClient;

import java.util.Objects;

An implementation of MongoAuthorization
Author:mremme
/** * An implementation of {@link MongoAuthorization} * * @author mremme */
public class MongoAuthorizationImpl implements MongoAuthorization { private static final Logger log = LoggerFactory.getLogger(MongoAuthorizationImpl.class); private MongoClient mongoClient; private String providerId; private MongoAuthorizationOptions options;
Creates a new instance
Params:
  • providerId – the provider ID to differentiate from others
  • mongoClient – the MongoClient to be used
  • options – the options for configuring the new instance
/** * Creates a new instance * @param providerId * the provider ID to differentiate from others * @param mongoClient * the {@link MongoClient} to be used * @param options * the options for configuring the new instance */
public MongoAuthorizationImpl(String providerId, MongoClient mongoClient, MongoAuthorizationOptions options) { this.providerId = Objects.requireNonNull(providerId); this.mongoClient = mongoClient; this.options = options; }
The default implementation uses the usernameField as search field
Params:
  • username –
Returns:
/** * The default implementation uses the usernameField as search field * * @param username * @return */
protected JsonObject createQuery(String username) { return new JsonObject().put(options.getUsernameField(), username); } @Override public String getId() { return providerId; } @Override public void getAuthorizations(User user, Handler<AsyncResult<Void>> handler) { JsonObject query = createQuery(user.principal().getString(options.getUsernameField())); mongoClient.find(options.getCollectionName(), query, res -> { if (res.failed()) { handler.handle(Future.failedFuture(res.cause())); return; } for (JsonObject jsonObject : res.result()) { JsonArray roles = jsonObject.getJsonArray(options.getRoleField()); if (roles!=null) { for (int i=0; i<roles.size(); i++) { String role = roles.getString(i); user.authorizations().add(providerId, RoleBasedAuthorization.create(role)); } } JsonArray permissions = jsonObject.getJsonArray(options.getPermissionField()); if (permissions!=null) { for (int i=0; i<permissions.size(); i++) { String permission = permissions.getString(i); user.authorizations().add(providerId, PermissionBasedAuthorization.create(permission)); } } } handler.handle(Future.succeededFuture()); }); } }