package com.l7tech.server.security.password;

import com.l7tech.gateway.common.security.password.SecurePassword;
import com.l7tech.objectmodel.Entity;
import com.l7tech.objectmodel.EntityHeader;
import com.l7tech.objectmodel.FindException;
import com.l7tech.server.HibernateEntityManager;
import com.l7tech.server.security.sharedkey.SharedKeyManager;
import com.l7tech.util.MasterPasswordManager;
import java.text.ParseException;
import java.util.concurrent.atomic.AtomicReference;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

@Transactional(propagation = Propagation.SUPPORTS, rollbackFor = Throwable.class)
public class SecurePasswordManagerImpl extends HibernateEntityManager<SecurePassword, EntityHeader> implements SecurePasswordManager {
   private final SharedKeyManager m;
   private final AtomicReference<MasterPasswordManager> n = new AtomicReference<>();

   public SecurePasswordManagerImpl(SharedKeyManager var1) {
      this.m = var1;
   }

   public Class<? extends Entity> getImpClass() {
      return SecurePassword.class;
   }

   @Override
   public String encryptPassword(char[] var1) throws FindException {
      return this.a().encryptPassword(var1);
   }

   @Override
   public char[] decryptPassword(String var1) throws FindException, ParseException {
      return this.a().decryptPassword(var1);
   }

   private MasterPasswordManager a() throws FindException {
      MasterPasswordManager var1 = this.n.get();
      if (var1 == null) {
         synchronized (this.n) {
            var1 = this.n.get();
            if (var1 == null) {
               var1 = new MasterPasswordManager(this.m.getSharedKey(), true);
               this.n.set(var1);
            }
         }
      }

      return var1;
   }
}
