package com.l7tech.gateway.common.admin;

import com.l7tech.gateway.common.security.rbac.MethodStereotype;
import com.l7tech.gateway.common.security.rbac.Secured;
import com.l7tech.kerberos.KerberosException;
import com.l7tech.kerberos.KeyTabEntryInfo;
import com.l7tech.objectmodel.EntityType;
import java.util.List;
import java.util.Map;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

@Secured
@Administrative
@Transactional(propagation = Propagation.SUPPORTS)
public interface KerberosAdmin {
   @Secured(stereotype = MethodStereotype.UNCHECKED_WIDE_OPEN)
   void validatePrincipal(String var1) throws KerberosException;

   @Secured(stereotype = MethodStereotype.UNCHECKED_WIDE_OPEN)
   List<KeyTabEntryInfo> getKeyTabEntryInfos() throws KerberosException;

   @Secured(stereotype = MethodStereotype.UNCHECKED_WIDE_OPEN)
   Map<String, String> getConfiguration();

   @Secured(types = EntityType.CLUSTER_PROPERTY, stereotype = MethodStereotype.SET_PROPERTY_BY_UNIQUE_ATTRIBUTE)
   @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
   void installKeytab(byte[] var1) throws KerberosException;

   @Secured(types = EntityType.CLUSTER_PROPERTY, stereotype = MethodStereotype.SET_PROPERTY_BY_UNIQUE_ATTRIBUTE)
   @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
   void deleteKeytab() throws KerberosException;

   @Secured(types = EntityType.CLUSTER_PROPERTY, stereotype = MethodStereotype.SET_PROPERTY_BY_UNIQUE_ATTRIBUTE)
   @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
   void setKeytabValidate(boolean var1) throws KerberosException;

   @Secured(stereotype = MethodStereotype.UNCHECKED_WIDE_OPEN)
   boolean getKeytabValidate() throws KerberosException;
}
