package com.orientechnologies.orient.server.token;
import com.orientechnologies.orient.core.db.ODatabaseDocumentInternal;
import com.orientechnologies.orient.core.id.ORID;
import com.orientechnologies.orient.core.metadata.security.OToken;
import com.orientechnologies.orient.core.metadata.security.OUser;
import com.orientechnologies.orient.core.metadata.security.jwt.OJsonWebToken;
import com.orientechnologies.orient.core.metadata.security.jwt.OJwtHeader;
import com.orientechnologies.orient.core.metadata.security.jwt.OJwtPayload;
import com.orientechnologies.orient.core.record.impl.ODocument;
/**
* Created by emrul on 28/09/2014.
*
* @author Emrul Islam <emrul@emrul.com> Copyright 2014 Emrul Islam
*/
public class JsonWebToken implements OJsonWebToken, OToken {
public final OJwtHeader header;
public final OJwtPayload payload;
private boolean isVerified;
private boolean isValid;
public JsonWebToken() {
this(new OrientJwtHeader(), new OrientJwtPayload());
}
public JsonWebToken(OJwtHeader header, OJwtPayload payload) {
isVerified = false;
isValid = false;
this.header = header;
this.payload = payload;
}
@Override
public OJwtHeader getHeader() {
return header;
}
@Override
public OJwtPayload getPayload() {
return payload;
}
@Override
public boolean getIsVerified() {
return isVerified;
}
@Override
public void setIsVerified(boolean verified) {
this.isVerified = verified;
}
@Override
public boolean getIsValid() {
return this.isValid;
}
@Override
public void setIsValid(boolean valid) {
this.isValid = valid;
}
@Override
public String getUserName() {
return payload.getUserName();
}
@Override
public String getDatabase() {
return getPayload().getDatabase();
}
@Override
public long getExpiry() {
return getPayload().getExpiry();
}
@Override
public ORID getUserId() {
return ((OrientJwtPayload) payload).getUserRid();
}
@Override
public String getDatabaseType() {
return getPayload().getDatabaseType();
}
@Override
public OUser getUser(ODatabaseDocumentInternal db) {
ORID userRid = ((OrientJwtPayload) payload).getUserRid();
ODocument result;
result = db.load(userRid, "roles:1");
if (!result.getSchemaClass().isSubClassOf(OUser.CLASS_NAME)) {
result = null;
}
return new OUser(result);
}
@Override
public void setExpiry(long expiry) {
this.payload.setExpiry(expiry);
}
@Override
public boolean isNowValid() {
long now =System.currentTimeMillis();
return getExpiry() > now && payload.getNotBefore() < now;
}
}