package org.github.etcd.viewer; import java.io.Serializable; import java.util.Collection; import java.util.Collections; import java.util.LinkedHashMap; import java.util.Map; import javax.xml.bind.DatatypeConverter; import org.apache.wicket.authroles.authentication.AuthenticatedWebSession; import org.apache.wicket.authroles.authorization.strategies.role.Roles; import org.apache.wicket.request.Request; public class EtcdWebSession extends AuthenticatedWebSession { private static final long serialVersionUID = 1L; private Map<String, AuthenticationData> authenticationData = new LinkedHashMap<>(); public EtcdWebSession(Request request) { super(request); } public static EtcdWebSession get() { return (EtcdWebSession)AuthenticatedWebSession.get(); } @Override public boolean authenticate(String username, String password) { return true; } @Override public Roles getRoles() { return new Roles("USER"); } public String getBasicAuthenticationToken(String registry) { if (!authenticationData.containsKey(registry)) { return null; } return authenticationData.get(registry).getToken(); } public Collection<AuthenticationData> getAuthentications() { return Collections.unmodifiableCollection(authenticationData.values()); } public boolean hasAuthentication(String registry) { return authenticationData.containsKey(registry); } public void signIn(String registry, String username, String password) { authenticationData.put(registry, new AuthenticationData(registry, username, password)); } public boolean signOut(String cluster, String username) { if (authenticationData.containsKey(cluster) && authenticationData.get(cluster).getUsername().equals(username)) { authenticationData.remove(cluster); return true; } return false; } public static class AuthenticationData implements Serializable { private static final long serialVersionUID = 1L; private String cluster; private String username; private String token; public AuthenticationData(String cluster, String username, String password) { this.cluster = cluster; this.username = username; this.token = DatatypeConverter.printBase64Binary((username + ":" + password).getBytes()); } public String getCluster() { return cluster; } public void setCluster(String cluster) { this.cluster = cluster; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getToken() { return token; } public void setToken(String token) { this.token = token; } @Override public String toString() { return "AuthenticationData [cluster=" + cluster + ", username=" + username + "]"; } } }