/*
* Copyright (c) 2017 wetransform GmbH
*
* All rights reserved. This program and the accompanying materials are made
* available under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 3 of the License,
* or (at your option) any later version.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this distribution. If not, see <http://www.gnu.org/licenses/>.
*
* Contributors:
* wetransform GmbH <http://www.wetransform.to>
*/
package eu.esdihumboldt.hale.io.haleconnect.internal;
import java.util.Optional;
import org.apache.commons.lang.StringUtils;
import com.haleconnect.api.user.v1.ApiClient;
import com.haleconnect.api.user.v1.api.LoginApi;
import com.haleconnect.api.user.v1.api.OrganisationsApi;
import com.haleconnect.api.user.v1.api.PermissionsApi;
import com.haleconnect.api.user.v1.api.UsersApi;
import com.haleconnect.api.user.v1.model.Credentials;
import eu.esdihumboldt.hale.io.haleconnect.BasePathResolver;
import eu.esdihumboldt.hale.io.haleconnect.HaleConnectServices;
import eu.esdihumboldt.hale.io.haleconnect.Owner;
import eu.esdihumboldt.hale.io.haleconnect.OwnerType;
/**
* Helper class for the user service API
*
* @author Florian Esser
*/
public class UserServiceHelper {
/**
* Build a {@link Credentials} object. Any null values passed in will be
* converted to an empty string.
*
* @param username the user name
* @param password the password
* @return a Credentials object with the given credentials
*/
public static Credentials buildCredentials(String username, String password) {
Credentials credentials = new Credentials();
credentials.setUsername(Optional.ofNullable(username).orElse(""));
credentials.setPassword(Optional.ofNullable(password).orElse(""));
return credentials;
}
/**
* @param resolver the base path resolver
* @param apiKey JWT for authentication
* @return ApiClient for the user service
*/
public static ApiClient getApiClient(BasePathResolver resolver, String apiKey) {
ApiClient apiClient = new ApiClient();
apiClient.setBasePath(resolver.getBasePath(HaleConnectServices.USER_SERVICE));
if (apiKey != null) {
apiClient.setApiKey(apiKey);
apiClient.setApiKeyPrefix("Bearer");
}
return apiClient;
}
/**
* @param resolver the base path resolver
* @return user service's Login API
*/
public static LoginApi getLoginApi(BasePathResolver resolver) {
return new LoginApi(getApiClient(resolver, null));
}
/**
* @param resolver the base path resolver
* @param apiKey JWT for authentication
* @return user service's Users API
*/
public static UsersApi getUsersApi(BasePathResolver resolver, String apiKey) {
return new UsersApi(getApiClient(resolver, apiKey));
}
/**
* @param resolver the base path resolver
* @param apiKey JWT for authentication
* @return user service's Organisations API
*/
public static OrganisationsApi getOrganisationsApi(BasePathResolver resolver, String apiKey) {
return new OrganisationsApi(getApiClient(resolver, apiKey));
}
/**
* Helper method to create an {@link Owner} if an API call returns both a
* user ID and an organisation ID, and the owner type is determined by which
* of the values is non-empty.
*
* @param userId user id value
* @param orgId organisation id value
* @return Owner object
* @throws IllegalArgumentException thrown if none or both of userId and
* orgId are non-empty.
*/
public static Owner toOwner(String userId, String orgId) throws IllegalArgumentException {
boolean isUser = !StringUtils.isEmpty(userId);
boolean isOrg = !StringUtils.isEmpty(orgId);
if (isUser == isOrg) {
throw new IllegalArgumentException("Exactly one of userId, orgId must be non-empty");
}
if (isUser) {
return new Owner(OwnerType.USER, userId);
}
else {
return new Owner(OwnerType.ORGANISATION, orgId);
}
}
/**
* @param resolver the base path resolver
* @param apiKey JWT for authentication
* @return project store's Files API
*/
public static PermissionsApi getPermissionsApi(BasePathResolver resolver, String apiKey) {
return new PermissionsApi(getApiClient(resolver, apiKey));
}
/**
* @param basePath the base path
* @param apiKey JWT for authentication
* @return project store's Files API
*/
public static PermissionsApi getPermissionsApi(String basePath, String apiKey) {
return new PermissionsApi(getApiClient(new BasePathResolver() {
@Override
public String getBasePath(String service) {
return basePath;
}
}, apiKey));
}
}