package eu.eudat.controllers; import eu.eudat.audit.AuditableAction; import eu.eudat.models.Account; import eu.eudat.models.AccountBuilder; import gr.cite.commons.web.oidc.principal.CurrentPrincipalResolver; import gr.cite.commons.web.oidc.principal.MyPrincipal; import gr.cite.tools.auditing.AuditService; import gr.cite.tools.fieldset.BaseFieldSet; import gr.cite.tools.fieldset.FieldSet; import gr.cite.tools.logging.LoggerService; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import javax.management.InvalidApplicationException; @RestController @RequestMapping(value = { "/api/principal/" }) public class PrincipalController { private static final LoggerService logger = new LoggerService(LoggerFactory.getLogger(PrincipalController.class)); private final AuditService auditService; private final CurrentPrincipalResolver currentPrincipalResolver; private final AccountBuilder accountBuilder; @Autowired public PrincipalController( CurrentPrincipalResolver currentPrincipalResolver, AccountBuilder accountBuilder, AuditService auditService) { this.currentPrincipalResolver = currentPrincipalResolver; this.accountBuilder = accountBuilder; this.auditService = auditService; } @RequestMapping(path = "me", method = RequestMethod.GET ) public Account me(FieldSet fieldSet) throws InvalidApplicationException { logger.debug("me"); if (fieldSet == null || fieldSet.isEmpty()) { fieldSet = new BaseFieldSet( Account._isAuthenticated, BaseFieldSet.asIndexer(Account._principal, Account.PrincipalInfo._subject), BaseFieldSet.asIndexer(Account._principal, Account.PrincipalInfo._userId), BaseFieldSet.asIndexer(Account._principal, Account.PrincipalInfo._name), BaseFieldSet.asIndexer(Account._principal, Account.PrincipalInfo._scope), BaseFieldSet.asIndexer(Account._principal, Account.PrincipalInfo._client), BaseFieldSet.asIndexer(Account._principal, Account.PrincipalInfo._issuedAt), BaseFieldSet.asIndexer(Account._principal, Account.PrincipalInfo._notBefore), BaseFieldSet.asIndexer(Account._principal, Account.PrincipalInfo._authenticatedAt), BaseFieldSet.asIndexer(Account._principal, Account.PrincipalInfo._expiresAt), BaseFieldSet.asIndexer(Account._principal, Account.PrincipalInfo._more), BaseFieldSet.asIndexer(Account._profile, Account.UserProfileInfo._avatarUrl), BaseFieldSet.asIndexer(Account._profile, Account.UserProfileInfo._language), BaseFieldSet.asIndexer(Account._profile, Account.UserProfileInfo._culture), BaseFieldSet.asIndexer(Account._profile, Account.UserProfileInfo._timezone), Account._roles, Account._permissions); } MyPrincipal principal = this.currentPrincipalResolver.currentPrincipal(); Account me = this.accountBuilder.build(fieldSet, principal); this.auditService.track(AuditableAction.Principal_Lookup); //auditService.trackIdentity(AuditableAction.IdentityTracking_Action); return me; } }