JwtHelper.java
package io.featureprobe.api.auth;
import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTCreator;
import com.auth0.jwt.algorithms.Algorithm;
import io.featureprobe.api.base.model.OrganizationMemberModel;
import io.featureprobe.api.base.util.JsonMapper;
import java.time.Instant;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
public class JwtHelper {
private static final String ACCOUNT_KEY = "account";
private static final String USER_ID_KEY = "userId";
private static final String ORGANIZATIONS = "organizations";
public static final String AUTHORITIES_CLAIM_NAME = "role";
public static String createJwtForMember(JwtConfiguration configuration,
AuthenticatedMember member,
List<OrganizationMemberModel> organizations,
String roleName) {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(Instant.now().toEpochMilli());
calendar.add(Calendar.HOUR, 12);
JWTCreator.Builder jwtBuilder = JWT.create().withSubject(member.getName());
jwtBuilder.withClaim(ACCOUNT_KEY, member.getName());
jwtBuilder.withClaim(USER_ID_KEY, member.getId());
Map<Long, OrganizationMemberModel> organizationMemberModelMap = organizations.stream().collect(Collectors
.toMap(OrganizationMemberModel::getOrganizationId, Function.identity()));
jwtBuilder.withClaim(ORGANIZATIONS, JsonMapper.toJSONString(organizationMemberModelMap));
jwtBuilder.withClaim(AUTHORITIES_CLAIM_NAME, roleName);
return jwtBuilder
.withNotBefore(new Date())
.withExpiresAt(calendar.getTime())
.sign(Algorithm.RSA256(configuration.getRsaPublicKey(), configuration.getRsaPrivateKey()));
}
}