package hudson.plugins.sfee;
import hudson.Extension;
import hudson.model.Descriptor;
import hudson.model.Hudson;
import hudson.security.SecurityRealm;
import hudson.util.Scrambler;
import java.util.Arrays;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.acegisecurity.providers.AuthenticationProvider;
import org.acegisecurity.providers.ProviderManager;
import org.acegisecurity.providers.rememberme.RememberMeAuthenticationProvider;
import org.acegisecurity.userdetails.UserDetailsService;
import org.kohsuke.stapler.StaplerRequest;
/**
* @author huybrechts
*/
public class SFEESecurityRealm extends SecurityRealm {
public SFEESecurityRealm() {
}
@Override
public SecurityComponents createSecurityComponents() {
ProviderManager manager = new ProviderManager();
UserDetailsService userDetailsService = new CachingUserDetailsService(
new SFEEUserDetailsService());
RememberMeAuthenticationProvider rememberMeAuthenticationProvider = new RememberMeAuthenticationProvider();
rememberMeAuthenticationProvider.setKey(Hudson.getInstance()
.getSecretKey());
manager.setProviders(Arrays.asList(
(AuthenticationProvider) rememberMeAuthenticationProvider,
(AuthenticationProvider) new SFEEAuthenticationManager(
userDetailsService)));
return new SecurityComponents(manager, userDetailsService);
}
@Override
public Descriptor<SecurityRealm> getDescriptor() {
return DESCRIPTOR;
}
@Extension
public static final DescriptorImpl DESCRIPTOR = new DescriptorImpl();
public static final class DescriptorImpl extends Descriptor<SecurityRealm> {
private Map<String, String> passwords = new ConcurrentHashMap<String, String>();
private DescriptorImpl() {
super(SFEESecurityRealm.class);
load();
}
public SFEESecurityRealm newInstance(StaplerRequest req)
throws FormException {
return new SFEESecurityRealm();
}
public String getDisplayName() {
return "SFEE User Database";
}
public String getPassword(String user) {
String result = passwords.get(user);
return result != null ? Scrambler.descramble(result) : result;
}
public void setPassword(String user, String password) {
passwords.put(user, Scrambler.scramble(password));
save();
}
@Override
public String getHelpFile() {
return null;
}
}
}