2 years ago

#37454

test-img

Curious

How to create a token for a role in dropwizard?

I am trying to create a login token for a user. Let's call that user "manager". There are already existing tokens for different roles. The manager role is a role such that the manager can also be an agent. Thus, a manager should be able to login on two different platforms - Mobile and Web and the manager should not be logged out from either of the platforms.

Here is what the profile service looks like.

public class ProfileService {

    private String baseUrl;
    private ObjectMapper objectMapper;

    public ProfileService(String baseUrl) {
        this.baseUrl = baseUrl;
        objectMapper = new ObjectMapper();
    }

    public ProfileDTO fetchUserProfile(String profileId){
        Client client = ClientBuilder.newClient();
        log.info("This is the base url {}", baseUrl);
        Map response = client.target(baseUrl + "/api/v1/users/" + profileId).request().get(Map.class);
        Object data = response.get("data");

        Map dataMap = this.objectMapper.convertValue(data, Map.class);

        Map roleGroup = this.objectMapper.convertValue(dataMap.get("roleGroup"), Map.class);
        List roleObjs = this.objectMapper.convertValue(dataMap.get("roles"), List.class);
        String userType = dataMap.get("userType").toString();
        String roleGroupName = (Objects.isNull(roleGroup)) ? userType : roleGroup.get("name").toString();
        List<String> roles = new ArrayList<>();

        if (Objects.nonNull(roleObjs)) {
            for (Object entry : roleObjs) {
                Map role = this.objectMapper.convertValue(entry, Map.class);
                roles.add(role.get("name").toString().toUpperCase(Locale.ROOT));
            }
        }

        return new ProfileDTO(dataMap.get("id").toString(), dataMap.get("email").toString(),
                dataMap.get("firstName").toString(), roleGroupName, userType,
                roles, (Boolean) dataMap.get("enabled"), (Boolean) dataMap.get("verified"));
    }
}

Here is the existing service that is not giving me the desired results.

private void verify(ProfileDTO profile, Types.Platform platform) throws AuthenticationException {
        if (!profile.isEnabled() || profile.getUserType() == null) {
            throw new AuthenticationException("Unauthorized!");
        }
        switch (platform) {
            case WEB:
                if(!profile.getUserType().equalsIgnoreCase(Constants.STAFF_ROLE)){

                    throw new AuthenticationException("Unauthorized web platform user");
                }
                return;
            case MOBILE:
                if (!profile.getUserType().equalsIgnoreCase(Constants.AGENT_ROLE)){
                    throw new AuthenticationException("Unauthorized mobile platform user");
                }
                return;
            case AGGREGATOR:
                if(!profile.getRoles().add("AGGREGATOR_ROLE")){
                    throw new AuthenticationException("Unauthorized aggregator");
                }
            default:
                throw new AuthenticationException("Unauthorized! Unknown platform");
        }
    }
private String generateToken(ClPrincipal principal) throws JoseException {
        final JwtClaims claims = new JwtClaims();
        claims.setSubject(principal.getProfileId());
        claims.setStringClaim(Constants.USERNAME, principal.getUsername());
        claims.setStringClaim(Constants.FIRST_NAME, principal.getFirstname());
        claims.setStringClaim(Constants.LAST_NAME, principal.getLastname());
        claims.setStringClaim(Constants.ROLE_GROUP, principal.getRoleGroup());
        claims.setStringListClaim(Constants.ROLES, principal.getRoles());
        claims.setExpirationTimeMinutesInTheFuture(oAuthConfig.getTokenTTL() / 60);
        claims.setJwtId(UUID.randomUUID().toString())

What do I do to get the desired result I stated earlier. I keep getting the default message for the switch case ("Unauthorized! Unknown platform")

java

authentication

token

dropwizard

0 Answers

Your Answer

Accepted video resources