package io.cattle.platform.iaas.api.auth.integration.local; import io.cattle.platform.core.util.SettingsUtils; import io.cattle.platform.iaas.api.auth.SecurityConstants; import io.cattle.platform.iaas.api.auth.dao.PasswordDao; import io.cattle.platform.json.JsonMapper; import io.cattle.platform.util.type.CollectionUtils; import io.github.ibuildthecloud.gdapi.factory.SchemaFactory; import io.github.ibuildthecloud.gdapi.model.ListOptions; import io.github.ibuildthecloud.gdapi.request.ApiRequest; import io.github.ibuildthecloud.gdapi.request.resource.impl.AbstractNoOpResourceManager; import java.util.Map; import javax.inject.Inject; import org.apache.commons.lang3.StringUtils; public class LocalAuthConfigManager extends AbstractNoOpResourceManager { @Inject PasswordDao passwordDao; @Inject SettingsUtils settingsUtils; @Inject JsonMapper jsonMapper; @Override public Class<?>[] getTypeClasses() { return new Class<?>[] {LocalAuthConfig.class}; } @Override protected Object createInternal(String type, ApiRequest request) { if (!StringUtils.equalsIgnoreCase(LocalAuthConstants.CONFIG, request.getType())) { return null; } Map<String, Object> config = CollectionUtils.toMap(request.getRequestObject()); String username = (String) config.get("username"); String name = (String) config.get("name"); String password = (String) config.get("password"); String accessMode = (String) config.get("accessMode"); Boolean enabled = (Boolean) config.get("enabled"); if (enabled == null) { settingsUtils.changeSetting(SecurityConstants.SECURITY_SETTING, false); settingsUtils.changeSetting(SecurityConstants.AUTH_PROVIDER_SETTING, SecurityConstants.NO_PROVIDER); return new LocalAuthConfig("", "", "", accessMode, false); } else { settingsUtils.changeSetting(SecurityConstants.SECURITY_SETTING, enabled); if (StringUtils.isNotBlank(username)) { LocalAuthPasswordValidator.validatePassword(password, jsonMapper); passwordDao.verifyUsernamePassword(username, password, name); } } settingsUtils.changeSetting(SecurityConstants.AUTH_PROVIDER_SETTING, LocalAuthConstants.CONFIG); settingsUtils.changeSetting(LocalAuthConstants.ACCESS_MODE_SETTING, accessMode); return new LocalAuthConfig(username, name, password, accessMode, enabled); } @Override protected Object listInternal(SchemaFactory schemaFactory, String type, Map<Object, Object> criteria, ListOptions options) { return new LocalAuthConfig("", "", "", LocalAuthConstants.ACCESS_MODE.get(), SecurityConstants.SECURITY.get()); } }