TokenHelper.java

package io.featureprobe.api.auth;

import io.featureprobe.api.base.enums.OrganizationRoleEnum;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationToken;

public class TokenHelper {

    private static final String ACCOUNT_KEY = "account";
    private static final String USER_ID_KEY = "userId";
    private static final String ROLE_KEY = "role";

    public static final Long getUserId() {
        Authentication authentication = SecurityContextHolder.
                getContext().getAuthentication();
        if (authentication instanceof AccessTokenAuthenticationToken) {
            return ((AccessTokenAuthenticationToken)authentication).getPrincipal().getId();
        } else if (authentication instanceof  JwtAuthenticationToken) {
            return (Long)((JwtAuthenticationToken)authentication).getTokenAttributes().get(USER_ID_KEY);
        } else {
            return null;
        }
    }

    public static final String getAccount() {
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        if (authentication instanceof AccessTokenAuthenticationToken) {
            return ((AccessTokenAuthenticationToken)authentication).getPrincipal().getName();
        } else if (authentication instanceof  JwtAuthenticationToken) {
            return (String) ((JwtAuthenticationToken)authentication).getTokenAttributes().get(ACCOUNT_KEY);
        } else {
            return null;
        }
    }

    public static final String getRole() {
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        if (authentication instanceof AccessTokenAuthenticationToken) {
            return ((AccessTokenAuthenticationToken)authentication).getPrincipal().getRole();
        } else if (authentication instanceof  JwtAuthenticationToken) {
            return (String) ((JwtAuthenticationToken)authentication).getTokenAttributes().get(ROLE_KEY);
        } else {
            return null;
        }
    }

    public static final boolean isOwner() {
        return OrganizationRoleEnum.OWNER.name().equals(getRole());
    }
}