Skip to content

Instantly share code, notes, and snippets.

@WonderBeat
Created June 13, 2019 14:20
Show Gist options
  • Save WonderBeat/62125c9d525d01c2a793504e83309bf9 to your computer and use it in GitHub Desktop.
Save WonderBeat/62125c9d525d01c2a793504e83309bf9 to your computer and use it in GitHub Desktop.
public interface TokenManager {
enum VerificationResult {
OK, INVALID;
}
byte[] generate();
VerificationResult verify(byte[] token);
}
public class WithLuhnCheckSum implements TokenManager {
public final length;
public final checksum;
public final TokenManager delegate;
@Override
public byte[] generate() {
return delegate.generate() + generateCheckSum();
}
public byte[] generateCheckSum() {
return 'a';
}
@Override
public VerificationResult verify(byte[] token) {
if(verify(token[0:2])) {
return delegate.verify(token[0:-2]);
} else {
return EXPIRED;
}
}
}
public class WithSaveToKafkaManager implements TokenManager {
public final Producer producer;
public final TokenManager delegate;
@Override
public byte[] generate() {
byte[] generate = delegate.generate();
save(generate);
return generate;
}
@Override
public VerificationResult verify(byte[] token) {
return delegate.verify();
}
}
public interface TokenVerificator {
VerificationResult verify(byte[] token, TokenMeta);
}
class KafkaAwareTokenVerificator implements TokenManager {
TokenManager delegate;
List<TokenVerificator> verifications;
@Override
public byte[] generate() {
return delegate.generate();
}
@Override
public VerificationResult verify(byte[] token) {
Meta meta = retrieveMeta(token);
return verifications.all(_(meta));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment