55import java .io .PrintWriter ;
66import java .util .ArrayList ;
77import java .util .Collection ;
8+ import java .util .Locale ;
89import java .util .UUID ;
910
1011import javax .mail .MessagingException ;
1920
2021import util .EmailSender ;
2122import util .HttpUtils ;
23+ import util .Localizer ;
2224import util .RandomStringGenerator ;
2325import accounts .FrameworkUserManager ;
2426import accounts .UserProfile ;
3234 *
3335 * Error codes:
3436 * 1 - user already exists (during user registration, user with the same name or e-mail already exists)
37+ * 2 - incorrect old password (change password)
38+ * 3 - user doesn't exists (in restore password)
3539 */
3640public class AuthenticationServlet extends HttpServlet {
3741 /**
@@ -65,6 +69,11 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response)
6569 throws ServletException , IOException {
6670 String mode = request .getParameter ("mode" );
6771
72+ String language = request .getParameter ("lang" );
73+ if (language ==null )
74+ language = "en" ;
75+ Locale locale = new Locale (language );
76+
6877 PrintWriter out = response .getWriter ();
6978
7079 if ("login" .equals (mode )) {
@@ -143,15 +152,15 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response)
143152 return ;
144153 }
145154 // create user
146- String password = new RandomStringGenerator ().generateSimple ( 8 );
155+ String password = new RandomStringGenerator ().generateBasic ( 6 );
147156 try {
148157 frameworkUserManager .createUser (username , password , email );
149158
150- EmailSender emailSender = FrameworkConfiguration .getInstance (getServletContext ())
151- .getDefaultEmailSender ();
159+ FrameworkConfiguration frameworkConfiguration = FrameworkConfiguration .getInstance (getServletContext ());
160+ Localizer localizer = frameworkConfiguration .getLocalizer (locale );
161+ EmailSender emailSender = frameworkConfiguration .getDefaultEmailSender ();
152162
153- emailSender .send (email , "GeoKnow registration" , "Your login: " + username + ", password: "
154- + password );
163+ emailSender .send (email , localizer .localize ("email.subject.registration" ), localizer .localize ("login" ) + ": " + username + "\n " + localizer .localize ("password" ) + ": " + password );
155164 String responseStr = "{\" message\" : \" Your password will be sent to your e-mail address "
156165 + email + " \" }" ;
157166 response .getWriter ().print (responseStr );
@@ -174,15 +183,34 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response)
174183 boolean valid ;
175184 try {
176185 valid = frameworkUserManager .checkToken (username , token );
177- if (!valid )
178- response .sendError (HttpServletResponse .SC_INTERNAL_SERVER_ERROR , "invalid token " + token
179- + " for user " + username );
180- else {
186+ if (!valid ) {
187+ response .sendError (HttpServletResponse .SC_INTERNAL_SERVER_ERROR , "invalid token " + token
188+ + " for user " + username );
189+ } else {
190+ //check old password
191+ boolean isCorrect = frameworkUserManager .checkPassword (username , oldPassword );
192+ if (!isCorrect ) {
193+ response .setStatus (HttpServletResponse .SC_INTERNAL_SERVER_ERROR );
194+ out .print ("{\" code\" : \" 2\" , \" message\" : \" Incorrect old password\" }" );
195+ return ;
196+ }
197+
181198 // change password
182199 frameworkUserManager .changePassword (username , oldPassword , newPassword );
200+
201+ // send new password to user
202+ UserProfile userProfile = frameworkUserManager .getUserProfile (username );
203+ if (userProfile == null ) {
204+ response .sendError (HttpServletResponse .SC_INTERNAL_SERVER_ERROR , "User profile " + username + " not found" );
205+ return ;
206+ }
207+ FrameworkConfiguration frameworkConfiguration = FrameworkConfiguration .getInstance (getServletContext ());
208+ Localizer localizer = frameworkConfiguration .getLocalizer (locale );
209+ EmailSender emailSender = frameworkConfiguration .getDefaultEmailSender ();
210+ emailSender .send (userProfile .getEmail (), localizer .localize ("email.subject.passwordChanged" ), localizer .localize ("email.message.passwordChanged" ) + " " + username );
211+
183212 String responseStr = "{\" message\" : \" Your password was changed\" }" ;
184213 response .getWriter ().print (responseStr );
185-
186214 }
187215 } catch (Exception e ) {
188216 e .printStackTrace ();
@@ -197,18 +225,20 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response)
197225 try {
198226 userProfile = frameworkUserManager .getUserProfile (username );
199227 if (userProfile == null ) {
200- response .sendError (HttpServletResponse .SC_INTERNAL_SERVER_ERROR , "User profile "
201- + username + " not found" );
228+ response .setStatus (HttpServletResponse .SC_INTERNAL_SERVER_ERROR );
229+ out .print ("{\" code\" : \" 3\" , \" message\" : \" User doesn't exists\" }" );
230+ return ;
202231 }
203232 // change password
204- String password = new RandomStringGenerator ().generateSimple ( 8 );
233+ String password = new RandomStringGenerator ().generateBasic ( 6 );
205234 frameworkUserManager .setPassword (username , password );
206235
207236 // send new password to user
208- EmailSender emailSender = FrameworkConfiguration .getInstance (getServletContext ())
209- .getDefaultEmailSender ();
210- emailSender .send (userProfile .getEmail (), "GeoKnow restore password" , "Your login: "
211- + username + ", password: " + password );
237+ FrameworkConfiguration frameworkConfiguration = FrameworkConfiguration .getInstance (getServletContext ());
238+ Localizer localizer = frameworkConfiguration .getLocalizer (locale );
239+ EmailSender emailSender = frameworkConfiguration .getDefaultEmailSender ();
240+ emailSender .send (userProfile .getEmail (), localizer .localize ("email.subject.passwordRestored" ), localizer .localize ("login" ) + ": "
241+ + username + "\n " + localizer .localize ("password" ) + ": " + password );
212242 String responseStr = "{\" message\" : \" New password will be sent to your e-mail address "
213243 + userProfile .getEmail () + " \" }" ;
214244 response .getWriter ().print (responseStr );
0 commit comments