package com.airlock.iam.oauth2.domain.service.token;

import com.airlock.iam.oauth2.domain.model.token.OAuth2TokenKey;
import com.airlock.iam.oauth2.domain.model.token.RawOAuth2Token;
import com.airlock.iam.security.util.SeededSecureRandom;
import com.airlock.iam.security.util.crypto.random.AlphanumericRandomStringGenerator;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.Random;

public abstract class OAuth2TokenGenerator {
   private final Random random;

   protected OAuth2TokenGenerator(Random random) {
      this.random = (Random)(random != null ? random : SeededSecureRandom.getInstance());
   }

   public OAuth2TokenKey generateKey() {
      return OAuth2TokenKey.tokenKey(this.generateWafSafeRandomString(27));
   }

   protected final String generateWafSafeRandomString(int length) {
      return AlphanumericRandomStringGenerator.generateAlphanumericRandomString(length, this.random);
   }

   public abstract RawOAuth2Token generateToken(TokenGeneratorData var1);

   @SuppressFBWarnings(justification = "generated code")
   protected Random getRandom() {
      return this.random;
   }
}
