package com.hs.common.utils;

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.exceptions.JWTVerificationException;

import java.util.Date;
import java.util.List;

public class JWTUtil {
    /**
     * 生成token
     * @param sign 签名
     * @return
     */
    public static String create(String sign){
        String token= JWT.create().sign(Algorithm.HMAC256(sign));
        return token;
    }

    /**
     * 生成token并添加用户信息
     * @param sign 前面
     * @param audiences 用户信息
     * @return
     */
    public static String create(String sign, String... audiences){
        String token= JWT.create().withAudience(audiences)
                .sign(Algorithm.HMAC256(sign));
        return token;
    }

    /**
     * 生成token并添加用户信息
     * @param sign 签名
     * @param expires 过期时间（毫秒）
     * @param audiences 用户信息
     * @return
     */
    public static String create(String sign, long expires, String... audiences){
        Date expiresDate = new Date(System.currentTimeMillis() +  expires);
        String token= JWT.create().withAudience(audiences).withExpiresAt(expiresDate)
                .sign(Algorithm.HMAC256(sign));
        return token;
    }

    /**
     * 获取用户信息
     * @param token
     * @return
     */
    public static List<String> getAudience(String token){
        return JWT.decode(token).getAudience();
    }

    /**
     * 校验token
     * @param token
     * @param sign
     * @return
     */
    public static boolean verifier(String token, String sign){
        JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256(sign)).build();
        try {
            jwtVerifier.verify(token);
        } catch (JWTVerificationException e) {
            return false;
        }
        return true;
    }
}
