/*
* Password Management Servlets (PWM)
* http://www.pwm-project.org
*
* Copyright (c) 2006-2009 Novell, Inc.
* Copyright (c) 2009-2017 The PWM Project
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package password.pwm.http.servlet;
import password.pwm.error.ErrorInformation;
import password.pwm.error.PwmError;
import password.pwm.error.PwmUnrecoverableException;
import password.pwm.http.bean.ActivateUserBean;
import password.pwm.http.bean.AdminBean;
import password.pwm.http.bean.ChangePasswordBean;
import password.pwm.http.bean.ConfigGuideBean;
import password.pwm.http.bean.ConfigManagerBean;
import password.pwm.http.bean.DeleteAccountBean;
import password.pwm.http.bean.ForgottenPasswordBean;
import password.pwm.http.bean.LoginServletBean;
import password.pwm.http.bean.NewUserBean;
import password.pwm.http.bean.PwmSessionBean;
import password.pwm.http.bean.SetupOtpBean;
import password.pwm.http.bean.SetupResponsesBean;
import password.pwm.http.bean.ShortcutsBean;
import password.pwm.http.bean.UpdateProfileBean;
import password.pwm.http.servlet.admin.AdminServlet;
import password.pwm.http.servlet.changepw.PrivateChangePasswordServlet;
import password.pwm.http.servlet.changepw.PublicChangePasswordServlet;
import password.pwm.http.servlet.command.PrivateCommandServlet;
import password.pwm.http.servlet.command.PublicCommandServlet;
import password.pwm.http.servlet.configeditor.ConfigEditorServlet;
import password.pwm.http.servlet.configguide.ConfigGuideServlet;
import password.pwm.http.servlet.configmanager.ConfigManagerCertificatesServlet;
import password.pwm.http.servlet.configmanager.ConfigManagerLocalDBServlet;
import password.pwm.http.servlet.configmanager.ConfigManagerServlet;
import password.pwm.http.servlet.configmanager.ConfigManagerWordlistServlet;
import password.pwm.http.servlet.newuser.NewUserServlet;
import password.pwm.http.servlet.oauth.OAuthConsumerServlet;
import password.pwm.http.servlet.peoplesearch.PrivatePeopleSearchServlet;
import password.pwm.http.servlet.peoplesearch.PublicPeopleSearchServlet;
import javax.servlet.annotation.WebServlet;
import java.lang.annotation.Annotation;
public enum PwmServletDefinition {
Login(password.pwm.http.servlet.LoginServlet.class, LoginServletBean.class),
Logout(password.pwm.http.servlet.LogoutServlet.class, null),
OAuthConsumer(OAuthConsumerServlet.class, null),
PublicCommand(PublicCommandServlet.class, null),
PublicPeopleSearch(PublicPeopleSearchServlet.class, null),
PublicChangePassword(PublicChangePasswordServlet.class, ChangePasswordBean.class),
//Resource(password.pwm.http.servlet.ResourceFileServlet.class),
AccountInformation(AccountInformationServlet.class, null),
PrivateChangePassword(PrivateChangePasswordServlet.class, ChangePasswordBean.class),
SetupResponses(password.pwm.http.servlet.SetupResponsesServlet.class, SetupResponsesBean.class),
UpdateProfile(password.pwm.http.servlet.UpdateProfileServlet.class, UpdateProfileBean.class),
SetupOtp(password.pwm.http.servlet.SetupOtpServlet.class, SetupOtpBean.class),
Helpdesk(password.pwm.http.servlet.helpdesk.HelpdeskServlet.class, null),
Shortcuts(password.pwm.http.servlet.ShortcutServlet.class, ShortcutsBean.class),
PrivateCommand(PrivateCommandServlet.class, null),
PrivatePeopleSearch(PrivatePeopleSearchServlet.class, null),
GuestRegistration(password.pwm.http.servlet.GuestRegistrationServlet.class, null),
SelfDelete(DeleteAccountServlet.class, DeleteAccountBean.class),
Admin(AdminServlet.class, AdminBean.class),
ConfigGuide(ConfigGuideServlet.class, ConfigGuideBean.class),
ConfigEditor(ConfigEditorServlet.class, null),
ConfigManager(ConfigManagerServlet.class, ConfigManagerBean.class),
ConfigManager_Wordlists(ConfigManagerWordlistServlet.class, ConfigManagerBean.class),
ConfigManager_LocalDB(ConfigManagerLocalDBServlet.class, ConfigManagerBean.class),
ConfigManager_Certificates(ConfigManagerCertificatesServlet.class, ConfigManagerBean.class),
NewUser(NewUserServlet.class, NewUserBean.class),
ActivateUser(password.pwm.http.servlet.ActivateUserServlet.class, ActivateUserBean.class),
ForgottenPassword(password.pwm.http.servlet.forgottenpw.ForgottenPasswordServlet.class, ForgottenPasswordBean.class),
ForgottenUsername(password.pwm.http.servlet.ForgottenUsernameServlet.class, null),
;
private final String[] patterns;
private final String servletUrl;
private final Class<? extends PwmServlet> pwmServletClass;
private final Class<? extends PwmSessionBean> pwmSessionBeanClass;
PwmServletDefinition(final Class<? extends PwmServlet> pwmServletClass, final Class<? extends PwmSessionBean> pwmSessionBeanClass) {
this.pwmServletClass = pwmServletClass;
this.pwmSessionBeanClass = pwmSessionBeanClass;
try {
this.patterns = getWebServletAnnotation(pwmServletClass).urlPatterns();
} catch (Exception e) {
throw new IllegalStateException("error initializing PwmServletInfo value " + this.toString() + ", error: " + e.getMessage());
}
final String firstPattern = patterns[0];
final int lastSlash = firstPattern.lastIndexOf("/");
servletUrl = firstPattern.substring(lastSlash + 1,firstPattern.length());
}
public String[] urlPatterns() {
return patterns;
}
public String servletUrlName() {
return servletUrl;
}
public String servletUrl() {
return patterns[0];
}
public Class<? extends PwmServlet> getPwmServletClass() {
return pwmServletClass;
}
public Class<? extends PwmSessionBean> getPwmSessionBeanClass() {
return pwmSessionBeanClass;
}
private WebServlet getWebServletAnnotation(final Class<? extends PwmServlet> pwmServletClass) throws PwmUnrecoverableException {
for (final Annotation annotation : pwmServletClass.getDeclaredAnnotations()) {
if (annotation instanceof WebServlet) {
return (WebServlet)annotation;
}
}
throw new PwmUnrecoverableException(new ErrorInformation(PwmError.ERROR_UNKNOWN,"missing WebServlet annotation for class " + this.getClass().getName()));
}
}