All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.cybersource.shared.jwt.JWT Maven / Gradle / Ivy

There is a newer version: 0.3.2
Show newest version
package com.cybersource.shared.jwt;

import java.io.Serializable;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

public abstract class JWT implements Serializable {

    private final Map headerClaims = new HashMap<>();
    private final Map payloadClaims = new HashMap<>();

    protected JWT() {
        payload("jti", Tools.randomId(32));
        payload("iat", System.currentTimeMillis() / 1000L);
    }

    public Map header() {
        return Collections.unmodifiableMap(headerClaims);
    }

    public Map payload() {
        return Collections.unmodifiableMap(payloadClaims);
    }

    public String header(String key) {
        return headerClaims.get(key).toString();
    }

    public  T payload(String key) {
        return (T) payloadClaims.get(key);
    }

    public JWT header(String key, String val) {
        headerClaims.put(key, val);
        return this;
    }

    public JWT payload(Map map) {
        payloadClaims.putAll(map);
        return this;
    }

    public JWT payload(String key, Long val) {
        payloadClaims.put(key, val);
        return this;
    }

    public JWT payload(String key, Map val) {
        payloadClaims.put(key, val);
        return this;
    }

    public JWT payload(String key, String val) {
        payloadClaims.put(key, val);
        return this;
    }

    public String toJSON() {
        final StringBuilder json = new StringBuilder();
        Tools.write(json, payload());
        return json.toString();
    }

    public static Map parseHeader(String token) {
        final int dots = Tools.countDots(token);
        if (dots != 2 && dots != 4) {
            throw new IllegalArgumentException("Neither JWS nor JWE");
        }
        token = token.substring(0, token.indexOf('.'));
        token = new String(Tools.DECODER.decode(token), Tools.UTF8);

        Tools.JsonReader reader = new Tools.JsonReader();
        final Object json = reader.read(token);
        if (json instanceof Map) {
            return (Map) json;
        } else {
            throw new IllegalArgumentException("Not a JSON");
        }
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder(super.toString());
        sb.append(": ").append(header()).append('.').append(payload());
        return sb.toString();
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy