package fi.otavanopisto.muikku.auth;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.enterprise.inject.Any;
import javax.enterprise.inject.Instance;
import javax.inject.Inject;
import fi.otavanopisto.muikku.dao.security.AuthSourceDAO;
import fi.otavanopisto.muikku.dao.security.AuthSourceSettingDAO;
import fi.otavanopisto.muikku.model.security.AuthSource;
import fi.otavanopisto.muikku.model.security.AuthSourceSetting;
public class AuthSourceController {
@Inject
@Any
private Instance<AuthenticationProvider> authenticationProviders;
@Inject
private AuthSourceDAO authSourceDAO;
@Inject
private AuthSourceSettingDAO authSourceSettingsDAO;
// AuthSource
public AuthSource findAuthSourceById(Long id) {
return authSourceDAO.findById(id);
}
private AuthSource findAuthSourceByStrategy(String strategy) {
return authSourceDAO.findByStrategy(strategy);
}
public List<AuthSource> listCredentialessAuthSources() {
List<AuthSource> result = new ArrayList<>();
List<AuthenticationProvider> authenticationProviders = listCredentialessAuthenticationProviders();
for (AuthenticationProvider authenticationProvider : authenticationProviders) {
AuthSource authSource = findAuthSourceByStrategy(authenticationProvider.getName());
if (authSource != null) {
result.add(authSource);
}
}
return result;
}
public List<AuthSource> listCredentialAuthSources() {
List<AuthSource> result = new ArrayList<>();
List<AuthenticationProvider> authenticationProviders = listCredentialAuthenticationProviders();
for (AuthenticationProvider authenticationProvider : authenticationProviders) {
AuthSource authSource = findAuthSourceByStrategy(authenticationProvider.getName());
if (authSource != null) {
result.add(authSource);
}
}
return result;
}
// AuthSourceSettings
public AuthSourceSetting findAuthSourceSettingsByKey(AuthSource authSource, String key) {
return authSourceSettingsDAO.findByAuthSourceAndKey(authSource, key);
}
public List<AuthSourceSetting> listAuthSourceSettings(AuthSource authSource) {
return authSourceSettingsDAO.listByAuthSource(authSource);
}
// AuthenticationProvider
public AuthenticationProvider findAuthenticationProvider(AuthSource authSource) {
Iterator<AuthenticationProvider> providerIterator = authenticationProviders.iterator();
while (providerIterator.hasNext()) {
AuthenticationProvider provider = providerIterator.next();
if (provider.getName().equals(authSource.getStrategy())) {
return provider;
}
}
return null;
}
public List<AuthenticationProvider> listCredentialAuthenticationProviders() {
List<AuthenticationProvider> result = new ArrayList<>();
Iterator<AuthenticationProvider> providerIterator = authenticationProviders.iterator();
while (providerIterator.hasNext()) {
AuthenticationProvider provider = providerIterator.next();
if (provider.requiresCredentials()) {
result.add(provider);
}
}
return result;
}
public List<AuthenticationProvider> listCredentialessAuthenticationProviders() {
List<AuthenticationProvider> result = new ArrayList<>();
Iterator<AuthenticationProvider> providerIterator = authenticationProviders.iterator();
while (providerIterator.hasNext()) {
AuthenticationProvider provider = providerIterator.next();
if (!provider.requiresCredentials()) {
result.add(provider);
}
}
return result;
}
}