package net.whydah.admin.user; import com.fasterxml.jackson.databind.ObjectMapper; import net.whydah.admin.CredentialStore; import net.whydah.admin.user.uib.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import sun.reflect.generics.reflectiveObjects.NotImplementedException; import javax.ws.rs.NotAuthorizedException; import java.util.List; /** * Created by baardl on 18.04.14. */ @Service public class UserService { private static final Logger log = LoggerFactory.getLogger(UserService.class); private final UibUserConnection uibUserConnection; private final CredentialStore credentialStore; private final ObjectMapper mapper; @Autowired public UserService(UibUserConnection uibUserConnection, CredentialStore credentialStore) { this.uibUserConnection = uibUserConnection; this.credentialStore = credentialStore; credentialStore.setUserAdminServiceTokenId("2ff16f110b320dcbacf050b3b9062465"); this.mapper = new ObjectMapper(); } public UserIdentity createUserFromXml(String applicationTokenId, String userTokenId, String userXml) { UserIdentity createdUser = null; UserAggregate userAggregate = UserAggregate.fromXML(userXml); UserIdentityRepresentation userIdentity = userAggregate.getIdentity(); if (userIdentity != null) { String userJson = userIdentity.toJsonBare(); createdUser = createUser(applicationTokenId, userTokenId, userJson); } return createdUser; } public UserIdentity createUser(String applicationTokenId, String adminUserTokenId, String userJson) { UserIdentity userIdentity = null; if (hasAccess(applicationTokenId, adminUserTokenId)) { userIdentity = uibUserConnection.createUser(credentialStore.getUserAdminServiceTokenId(), adminUserTokenId, userJson); } else { throw new NotAuthorizedException("Not Authorized to create user"); } return userIdentity; } public boolean changePassword(String applicationTokenId, String adminUserTokenId, String userName, String password) { boolean isUpdated; if (hasAccess(applicationTokenId, adminUserTokenId)) { isUpdated = uibUserConnection.changePassword(credentialStore.getUserAdminServiceTokenId(), adminUserTokenId, userName, password); } else { throw new NotAuthorizedException("Not Authorized to change password"); } return isUpdated; } public UserAggregate addUserRoleFromXml(String applicationTokenId, String adminUserTokenId, String uid, String propertyOrRoleXml) { UserAggregate updatedUser = null; if (hasAccess(applicationTokenId, adminUserTokenId)) { UserPropertyAndRole userPropertyAndRole = UserPropertyAndRole.fromXml(propertyOrRoleXml); updatedUser = uibUserConnection.addPropertyOrRole(credentialStore.getUserAdminServiceTokenId(), adminUserTokenId, uid, userPropertyAndRole); } else { throw new NotAuthorizedException("Not Authorized to add user role()"); } return updatedUser; } public RoleRepresentation addUserRole(String applicationTokenId, String adminUserTokenId, String uid, RoleRepresentationRequest roleRequest) { RoleRepresentation role; if (hasAccess(applicationTokenId, adminUserTokenId)) { role = uibUserConnection.addRole(credentialStore.getUserAdminServiceTokenId(), adminUserTokenId, uid, roleRequest); } else { throw new NotAuthorizedException("Not Authorized to add user role()"); } return role; } public void deleteUserRole(String applicationTokenId, String adminUserTokenId, String uid, String userRoleId) { if (hasAccess(applicationTokenId, adminUserTokenId)) { uibUserConnection.deleteUserRole(credentialStore.getUserAdminServiceTokenId(),adminUserTokenId, uid, userRoleId); } else { throw new NotAuthorizedException("Not Authorized to delete user role()"); } } public UserAggregate updateUserRole(String applicationId,String applicationName, String applicationRoleName, String applicationRoleValue) { throw new NotImplementedException(); } public UserIdentity getUserIdentity(String applicationTokenId, String userTokenId, String uid) { UserIdentity userIdentity; if (hasAccess(applicationTokenId, userTokenId)) { userIdentity = uibUserConnection.getUserIdentity(credentialStore.getUserAdminServiceTokenId(), userTokenId, uid); } else { throw new NotAuthorizedException("Not Authorized to getUserIdentity()"); } /* UserIdentity userIdentity = new UserIdentity("uid","username","first", "last", "", "first.last@example.com", "12234", ""); List<UserPropertyAndRole> roles = new ArrayList<>(); roles.add(buildStubRole()); userAggregate = new UserAggregate(userIdentity, roles); */ log.trace("found {}", userIdentity); return userIdentity; } public UserAggregate getUserAggregateByUid(String applicationTokenId, String userTokenId, String uid) { UserAggregate userAggregate; if (!hasAccess(applicationTokenId, userTokenId)) { throw new NotAuthorizedException("Not Authorized to getUserAggregateByUid()"); } userAggregate = uibUserConnection.getUserAggregateByUid(credentialStore.getUserAdminServiceTokenId(), userTokenId, uid); log.trace("found UserAggregate {}", userAggregate); return userAggregate; } private UserPropertyAndRole buildStubRole() { return new UserPropertyAndRole("id", "uid", "1", "appname", "orgName", "user", "true"); } boolean hasAccess(String applicationTokenId, String userTokenId) { //FIXME validate user and applciation trying to create a new user. return true; } /* public String getRolesAsJson(String applicationTokenId, String userTokenId, String uid) { String roles; if (hasAccess(applicationTokenId, userTokenId)) { roles = uibUserConnection.getRolesAsJson(credentialStore.getUserAdminServiceTokenId(), userTokenId, uid); } else { throw new NotAuthorizedException("Not Authorized to getRolesAsJson()"); } return roles; } */ public String getRolesAsJson(String applicationTokenId, String userTokenId, String uid) { if (hasAccess(applicationTokenId, userTokenId)) { return uibUserConnection.getRolesAsJson(credentialStore.getUserAdminServiceTokenId(), userTokenId, uid); } else { throw new NotAuthorizedException("Not Authorized to getRolesAsJson()"); } /* List<RoleRepresentation> roles = getRoles(applicationTokenId, userTokenId, uid); String result; try { result = mapper.writeValueAsString(roles); } catch (IOException e) { log.error("Error converting List<RoleRepresentation> to json. ", e); return null; } return result; */ /* String result = ""; for (RoleRepresentation role : roles) { result += role.toJson(); } */ } public String getRolesAsXml(String applicationTokenId, String userTokenId, String uid) { List<RoleRepresentation> roles = getRoles(applicationTokenId, userTokenId, uid); String result = "<applications>"; for (RoleRepresentation role : roles) { result += role.toXML(); } result += "</applications>"; return result; } private List<RoleRepresentation> getRoles(String applicationTokenId, String userTokenId, String uid) { List<RoleRepresentation> roles; if (hasAccess(applicationTokenId, userTokenId)) { String rolesJson = uibUserConnection.getRolesAsJson(credentialStore.getUserAdminServiceTokenId(), userTokenId, uid); log.debug("rolesJson {}", rolesJson); roles = mapRolesFromString(rolesJson); } else { throw new NotAuthorizedException("Not Authorized to getRolesAsJson()"); } return roles; } private List<RoleRepresentation> mapRolesFromString(String rolesJson) { return RoleRepresentationMapper.fromJson(rolesJson); } public void deleteUser(String applicationTokenId, String userTokenId, String uid) { if (hasAccess(applicationTokenId, userTokenId)) { uibUserConnection.deleteUser(credentialStore.getUserAdminServiceTokenId(), userTokenId, uid); } else { throw new NotAuthorizedException("Not Authorized to deleteUser()"); } } }