PwmServletDefinition.java 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. /*
  2. * Password Management Servlets (PWM)
  3. * http://www.pwm-project.org
  4. *
  5. * Copyright (c) 2006-2009 Novell, Inc.
  6. * Copyright (c) 2009-2019 The PWM Project
  7. *
  8. * Licensed under the Apache License, Version 2.0 (the "License");
  9. * you may not use this file except in compliance with the License.
  10. * You may obtain a copy of the License at
  11. *
  12. * http://www.apache.org/licenses/LICENSE-2.0
  13. *
  14. * Unless required by applicable law or agreed to in writing, software
  15. * distributed under the License is distributed on an "AS IS" BASIS,
  16. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  17. * See the License for the specific language governing permissions and
  18. * limitations under the License.
  19. */
  20. package password.pwm.http.servlet;
  21. import password.pwm.error.ErrorInformation;
  22. import password.pwm.error.PwmError;
  23. import password.pwm.error.PwmUnrecoverableException;
  24. import password.pwm.http.bean.ActivateUserBean;
  25. import password.pwm.http.bean.AdminBean;
  26. import password.pwm.http.bean.ChangePasswordBean;
  27. import password.pwm.http.bean.ConfigGuideBean;
  28. import password.pwm.http.bean.ConfigManagerBean;
  29. import password.pwm.http.bean.DeleteAccountBean;
  30. import password.pwm.http.bean.ForgottenPasswordBean;
  31. import password.pwm.http.bean.LoginServletBean;
  32. import password.pwm.http.bean.NewUserBean;
  33. import password.pwm.http.bean.PwmSessionBean;
  34. import password.pwm.http.bean.SetupOtpBean;
  35. import password.pwm.http.bean.SetupResponsesBean;
  36. import password.pwm.http.bean.ShortcutsBean;
  37. import password.pwm.http.bean.UpdateProfileBean;
  38. import password.pwm.http.servlet.accountinfo.AccountInformationServlet;
  39. import password.pwm.http.servlet.activation.ActivateUserServlet;
  40. import password.pwm.http.servlet.admin.AdminServlet;
  41. import password.pwm.http.servlet.changepw.PrivateChangePasswordServlet;
  42. import password.pwm.http.servlet.changepw.PublicChangePasswordServlet;
  43. import password.pwm.http.servlet.command.PrivateCommandServlet;
  44. import password.pwm.http.servlet.command.PublicCommandServlet;
  45. import password.pwm.http.servlet.configeditor.ConfigEditorServlet;
  46. import password.pwm.http.servlet.configguide.ConfigGuideServlet;
  47. import password.pwm.http.servlet.configmanager.ConfigManagerCertificatesServlet;
  48. import password.pwm.http.servlet.configmanager.ConfigManagerLocalDBServlet;
  49. import password.pwm.http.servlet.configmanager.ConfigManagerLoginServlet;
  50. import password.pwm.http.servlet.configmanager.ConfigManagerServlet;
  51. import password.pwm.http.servlet.configmanager.ConfigManagerWordlistServlet;
  52. import password.pwm.http.servlet.newuser.NewUserServlet;
  53. import password.pwm.http.servlet.oauth.OAuthConsumerServlet;
  54. import password.pwm.http.servlet.peoplesearch.PrivatePeopleSearchServlet;
  55. import password.pwm.http.servlet.peoplesearch.PublicPeopleSearchServlet;
  56. import password.pwm.http.servlet.updateprofile.UpdateProfileServlet;
  57. import javax.servlet.annotation.WebServlet;
  58. import java.lang.annotation.Annotation;
  59. import java.util.Arrays;
  60. import java.util.Collection;
  61. import java.util.Collections;
  62. import java.util.EnumSet;
  63. public enum PwmServletDefinition
  64. {
  65. Login( password.pwm.http.servlet.LoginServlet.class, LoginServletBean.class ),
  66. Logout( password.pwm.http.servlet.LogoutServlet.class, null ),
  67. OAuthConsumer( OAuthConsumerServlet.class, null ),
  68. PublicCommand( PublicCommandServlet.class, null ),
  69. PublicPeopleSearch( PublicPeopleSearchServlet.class, null ),
  70. PublicChangePassword( PublicChangePasswordServlet.class, ChangePasswordBean.class ),
  71. Resource( password.pwm.http.servlet.resource.ResourceFileServlet.class, null ),
  72. AccountInformation( AccountInformationServlet.class, null ),
  73. PrivateChangePassword( PrivateChangePasswordServlet.class, ChangePasswordBean.class, Flag.RequiresUserPasswordAndBind ),
  74. SetupResponses( password.pwm.http.servlet.SetupResponsesServlet.class, SetupResponsesBean.class, Flag.RequiresUserPasswordAndBind ),
  75. UpdateProfile( UpdateProfileServlet.class, UpdateProfileBean.class, Flag.RequiresUserPasswordAndBind ),
  76. SetupOtp( password.pwm.http.servlet.SetupOtpServlet.class, SetupOtpBean.class, Flag.RequiresUserPasswordAndBind ),
  77. Helpdesk( password.pwm.http.servlet.helpdesk.HelpdeskServlet.class, null ),
  78. Shortcuts( password.pwm.http.servlet.ShortcutServlet.class, ShortcutsBean.class ),
  79. PrivateCommand( PrivateCommandServlet.class, null ),
  80. PrivatePeopleSearch( PrivatePeopleSearchServlet.class, null ),
  81. GuestRegistration( password.pwm.http.servlet.GuestRegistrationServlet.class, null, Flag.RequiresUserPasswordAndBind ),
  82. SelfDelete( DeleteAccountServlet.class, DeleteAccountBean.class ),
  83. ClientApi( ClientApiServlet.class, null ),
  84. Admin( AdminServlet.class, AdminBean.class ),
  85. ConfigGuide( ConfigGuideServlet.class, ConfigGuideBean.class ),
  86. ConfigEditor( ConfigEditorServlet.class, null ),
  87. ConfigManager( ConfigManagerServlet.class, ConfigManagerBean.class ),
  88. ConfigManager_Login( ConfigManagerLoginServlet.class, ConfigManagerBean.class ),
  89. ConfigManager_Wordlists( ConfigManagerWordlistServlet.class, ConfigManagerBean.class ),
  90. ConfigManager_LocalDB( ConfigManagerLocalDBServlet.class, ConfigManagerBean.class ),
  91. ConfigManager_Certificates( ConfigManagerCertificatesServlet.class, ConfigManagerBean.class ),
  92. FullPageHealth( FullPageHealthServlet.class, null ),
  93. NewUser( NewUserServlet.class, NewUserBean.class ),
  94. ActivateUser( ActivateUserServlet.class, ActivateUserBean.class ),
  95. ForgottenPassword( password.pwm.http.servlet.forgottenpw.ForgottenPasswordServlet.class, ForgottenPasswordBean.class ),
  96. ForgottenUsername( password.pwm.http.servlet.ForgottenUsernameServlet.class, null ),;
  97. private final String[] patterns;
  98. private final String servletUrl;
  99. private final Class<? extends PwmServlet> pwmServletClass;
  100. private final Class<? extends PwmSessionBean> pwmSessionBeanClass;
  101. private final Collection<Flag> flags;
  102. public enum Flag
  103. {
  104. RequiresUserPasswordAndBind,
  105. }
  106. PwmServletDefinition(
  107. final Class<? extends PwmServlet> pwmServletClass,
  108. final Class<? extends PwmSessionBean> pwmSessionBeanClass,
  109. final Flag... flags
  110. )
  111. {
  112. this.pwmServletClass = pwmServletClass;
  113. this.pwmSessionBeanClass = pwmSessionBeanClass;
  114. final EnumSet flagSet = EnumSet.noneOf( Flag.class );
  115. Collections.addAll( flagSet, flags );
  116. this.flags = Collections.unmodifiableSet( flagSet );
  117. try
  118. {
  119. this.patterns = getWebServletAnnotation( pwmServletClass ).urlPatterns();
  120. }
  121. catch ( final Exception e )
  122. {
  123. throw new IllegalStateException( "error initializing PwmServletInfo value " + this.toString() + ", error: " + e.getMessage() );
  124. }
  125. final String firstPattern = patterns[ 0 ];
  126. final int lastSlash = firstPattern.lastIndexOf( "/" );
  127. servletUrl = firstPattern.substring( lastSlash + 1 );
  128. }
  129. public String[] urlPatterns( )
  130. {
  131. return patterns == null ? null : Arrays.copyOf( patterns, patterns.length );
  132. }
  133. public String servletUrlName( )
  134. {
  135. return servletUrl;
  136. }
  137. public String servletUrl( )
  138. {
  139. return patterns[ 0 ];
  140. }
  141. public Class<? extends PwmServlet> getPwmServletClass( )
  142. {
  143. return pwmServletClass;
  144. }
  145. public Class<? extends PwmSessionBean> getPwmSessionBeanClass( )
  146. {
  147. return pwmSessionBeanClass;
  148. }
  149. private WebServlet getWebServletAnnotation( final Class<? extends PwmServlet> pwmServletClass ) throws PwmUnrecoverableException
  150. {
  151. for ( final Annotation annotation : pwmServletClass.getDeclaredAnnotations() )
  152. {
  153. if ( annotation instanceof WebServlet )
  154. {
  155. return ( WebServlet ) annotation;
  156. }
  157. }
  158. throw new PwmUnrecoverableException( new ErrorInformation( PwmError.ERROR_INTERNAL, "missing WebServlet annotation for class " + this.getClass().getName() ) );
  159. }
  160. public Collection<Flag> getFlags()
  161. {
  162. return flags;
  163. }
  164. }