com.twilio.jwt.client.ClientCapability Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of twilio Show documentation
Show all versions of twilio Show documentation
Twilio Java Helper Library
package com.twilio.jwt.client;
import com.google.common.base.Joiner;
import com.google.common.collect.Lists;
import com.twilio.jwt.Jwt;
import com.twilio.jwt.JwtEncodingException;
import io.jsonwebtoken.SignatureAlgorithm;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* JWT builder for Client Capabilities.
*/
public class ClientCapability extends Jwt {
private final List scopes;
private ClientCapability(Builder b) {
super(
SignatureAlgorithm.HS256,
b.authToken,
b.accountSid,
new Date(new Date().getTime() + b.ttl * 1000)
);
this.scopes = b.scopes;
}
@Override
public Map getHeaders() {
Map headers = new HashMap<>();
headers.put("alg", "HS256");
return headers;
}
@Override
public Map getClaims() {
Map payload = new HashMap<>();
try {
List scopes = new ArrayList<>();
for (Scope scope : this.scopes) {
scopes.add(scope.getPayload());
}
payload.put("scope", Joiner.on(' ').join(scopes));
} catch (UnsupportedEncodingException e) {
throw new JwtEncodingException(e);
}
return payload;
}
/** Builder used to construct a Client Capability. */
public static class Builder {
private String accountSid;
private String authToken;
private int ttl = 3600;
private List scopes = Lists.newArrayList();
/**
* Create a new builder for a Client Capability.
*
* @param accountSid account to use
* @param authToken auth token
*/
public Builder(String accountSid, String authToken) {
this.accountSid = accountSid;
this.authToken = authToken;
}
public Builder ttl(int ttl) {
this.ttl = ttl;
return this;
}
public Builder scopes(Collection scopes) {
this.scopes.addAll(scopes);
return this;
}
public ClientCapability build() {
return new ClientCapability(this);
}
}
}