package org.ff4j.web; import static org.ff4j.web.FF4jWebConstants.ROLE_READ; import static org.ff4j.web.FF4jWebConstants.ROLE_WRITE; /* * #%L * ff4j-core * %% * Copyright (C) 2013 - 2016 FF4J * %% * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * #L% */ import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; import org.ff4j.FF4j; /** * Bean to configure security for the WebAPI. This custom bean is defined to limit dependencies to Spring security for instance. * * @author Cedrick Lunven (@clunven) */ public class ApiConfig implements FF4jProvider { /** Configuration of ff4j. */ private FF4j ff4j; /** Enable authentication for jersey. */ private boolean authenticate = false; /** Enable authorization for jersey. */ private boolean autorize = false; /** Enable logging filter for jersey. */ private boolean log = false; /** Enable Swagger Documentation. */ private boolean documentation = true; /** Number. */ private String version = getClass().getPackage().getImplementationVersion(); /** User of the API (login/password). */ private Map<String, String> users = new HashMap<String, String>(); /** will hold granted api Keys. */ private Set<String> apiKeys = new HashSet<String>(); /** will hold all permissions for both user and apiKey. */ private Map<String, Set<String>> permissions = new HashMap<String, Set<String>>(); private String host = "localhost"; private int port = 8282; private String webContext = "ff4j-demo"; /** * Default constructor. */ public ApiConfig() { version = getClass().getPackage().getImplementationVersion(); } /** * Initialized with a ff4j. */ public ApiConfig(FF4j ff) { this(); this.ff4j = ff; } /** * Helper method to create a user. * * @param userName * target username * @param password * target password * @param read * role read * @param write * role write */ public ApiConfig createUser(String userName, String password, boolean read, boolean write, Set <String > usrPerm) { users.put(userName, password); Set<String> tmpPerm = new HashSet<String>(); if (read) { tmpPerm.add(ROLE_READ); } if (write) { tmpPerm.add(ROLE_WRITE); } if (usrPerm != null) { tmpPerm.addAll(usrPerm); } permissions.put(userName, tmpPerm); return this; } /** * Helper method to create an apiKey. * * @param apiKey * target apiKey * @param read * role read * @param write * role write */ public ApiConfig createApiKey(String apiKey, boolean read, boolean write, Set <String > usrPerm) { apiKeys.add(apiKey); Set<String> tmpPerm = new HashSet<String>(); if (read) { tmpPerm.add(ROLE_READ); } if (write) { tmpPerm.add(ROLE_WRITE); } if (usrPerm != null) { tmpPerm.addAll(usrPerm); } permissions.put(apiKey, tmpPerm); return this; } /** {@inheritDoc} */ @Override public FF4j getFF4j() { return ff4j; } /** * Setter accessor for attribute 'fF4j'. * * @param fF4j * new value for 'fF4j ' */ public void setFF4j(FF4j fF4j) { this.ff4j = fF4j; } /** * Getter accessor for attribute 'users'. * * @return current value of 'users' */ public Map<String, String> getUsers() { return users; } /** * Setter accessor for attribute 'users'. * * @param users * new value for 'users ' */ public void setUsers(Map<String, String> users) { this.users = users; } /** * Getter accessor for attribute 'apiKeys'. * * @return current value of 'apiKeys' */ public Set<String> getApiKeys() { return apiKeys; } /** * Setter accessor for attribute 'apiKeys'. * * @param apiKeys * new value for 'apiKeys ' */ public void setApiKeys(Set<String> apiKeys) { this.apiKeys = apiKeys; } /** * Getter accessor for attribute 'permissions'. * * @return current value of 'permissions' */ public Map<String, Set<String>> getPermissions() { return permissions; } /** * Setter accessor for attribute 'permissions'. * * @param permissions * new value for 'permissions ' */ public void setPermissions(Map<String, Set<String>> permissions) { this.permissions = permissions; } /** * Getter accessor for attribute 'contextPath'. * * @return * current value of 'contextPath' */ public String getContextPath() { return "http://" + getHost() + ":" + getPort() + "/" + getWebContext() + "/api"; } /** * Getter accessor for attribute 'host'. * * @return * current value of 'host' */ public String getHost() { return host; } /** * Setter accessor for attribute 'host'. * @param host * new value for 'host ' */ public void setHost(String host) { this.host = host; } /** * Getter accessor for attribute 'port'. * * @return * current value of 'port' */ public int getPort() { return port; } /** * Setter accessor for attribute 'port'. * @param port * new value for 'port ' */ public void setPort(int port) { this.port = port; } /** * Getter accessor for attribute 'webContext'. * * @return * current value of 'webContext' */ public String getWebContext() { return webContext; } /** * Setter accessor for attribute 'webContext'. * @param webContext * new value for 'webContext ' */ public void setWebContext(String webContext) { this.webContext = webContext; } /** * Getter accessor for attribute 'authenticate'. * * @return * current value of 'authenticate' */ public boolean isAuthenticate() { return authenticate; } /** * Setter accessor for attribute 'authenticate'. * @param authenticate * new value for 'authenticate ' */ public void setAuthenticate(boolean authenticate) { this.authenticate = authenticate; } /** * Getter accessor for attribute 'autorize'. * * @return * current value of 'autorize' */ public boolean isAutorize() { return autorize; } /** * Setter accessor for attribute 'autorize'. * @param autorize * new value for 'autorize ' */ public void setAutorize(boolean autorize) { this.autorize = autorize; } /** * Getter accessor for attribute 'log'. * * @return * current value of 'log' */ public boolean isLog() { return log; } /** * Setter accessor for attribute 'log'. * @param log * new value for 'log ' */ public void setLog(boolean log) { this.log = log; } /** * Getter accessor for attribute 'documentation'. * * @return * current value of 'documentation' */ public boolean isDocumentation() { return documentation; } /** * Setter accessor for attribute 'documentation'. * @param documentation * new value for 'documentation ' */ public void setDocumentation(boolean documentation) { this.documentation = documentation; } /** * Getter accessor for attribute 'version'. * * @return * current value of 'version' */ public String getVersion() { return version; } /** * Setter accessor for attribute 'version'. * @param version * new value for 'version ' */ public void setVersion(String version) { this.version = version; } }