1212
1313use Symfony \Component \HttpFoundation \Request ;
1414use Symfony \Component \HttpFoundation \Response ;
15+ use Symfony \Component \HttpFoundation \RedirectResponse ;
1516use Goteo \Application \Exception \ControllerAccessDeniedException ;
1617
1718use Goteo \Application \App ;
@@ -43,14 +44,36 @@ public function redirectLoginAction(Request $request) {
4344 }
4445
4546 /**
46- * Reusable static login checker
47+ * Checks if the user is logged or needs to redirect to SSL
48+ * @return [type] [description]
4749 */
48- public static function checkLogin (Request $ request ) {
49- // Already logged?
50+ protected static function checkSession (Request $ request ) {
51+
52+ // Already logged? let's get out of here
5053 if (Session::isLogged ()) {
5154 return App::dispatch (AppEvents::ALREADY_LOGGED , new FilterAuthEvent (Session::getUser ()))->getUserRedirect ($ request );
5255 }
5356
57+ // Check if needs to be redirected to SSL
58+ if (Config::get ('ssl ' ) && !$ request ->isSecure ()) {
59+ if (null !== $ qs = $ request ->getQueryString ()) {
60+ $ qs = '? ' .$ qs ;
61+ }
62+
63+ return new RedirectResponse ('https:// ' . $ request ->getHttpHost ().$ request ->getBaseUrl ().$ request ->getPathInfo ().$ qs );
64+ }
65+
66+ // Nothing to return if everything is ok
67+ }
68+
69+ /**
70+ * Reusable static login checker
71+ */
72+ public static function checkLogin (Request $ request ) {
73+ if ($ sess = static ::checkSession ($ request )) {
74+ return $ sess ;
75+ }
76+
5477 // check username/password
5578 if ($ request ->request ->has ('username ' )) {
5679 $ username = strtolower ($ request ->request ->get ('username ' ));
@@ -74,14 +97,14 @@ public static function checkLogin(Request $request) {
7497 return true ;
7598 }
7699
77- public function loginAction (Request $ request )
78- {
100+ public function loginAction (Request $ request ) {
79101 $ result = self ::checkLogin ($ request );
80102 if ($ result instanceOf Response) return $ result ;
81103
82104 return $ this ->viewResponse ('auth/login ' , ['return ' => $ request ->query ->get ('return ' )]);
83105
84106 }
107+
85108 /**
86109 * Cerrar sesión.
87110 * TODO: change to a event dispatcher
@@ -115,14 +138,12 @@ public function logoutAction(Request $request) {
115138 * Reusable static signup checker
116139 */
117140 public static function checkSignup (Request $ request ) {
118- // Already logged?
119- if (Session::isLogged ()) {
120- return App::dispatch (AppEvents::ALREADY_LOGGED , new FilterAuthEvent (Session::getUser ()))->getUserRedirect ($ request );
141+ if ($ sess = static ::checkSession ($ request )) {
142+ return $ sess ;
121143 }
122144
123145 $ vars = [];
124146
125-
126147 if ($ request ->getMethod () == 'POST ' ) {
127148 foreach ($ request ->request ->all () as $ key => $ value ) {
128149 $ vars [$ key ] = trim ($ value );
@@ -173,17 +194,15 @@ public static function checkSignup(Request $request) {
173194 return $ vars ;
174195 }
175196
176- public function signupAction (Request $ request )
177- {
197+ public function signupAction (Request $ request ) {
178198 $ result = self ::checkSignup ($ request );
179199 if ($ result instanceOf Response) return $ result ;
180200
181201 return $ this ->viewResponse ('auth/signup ' , $ result );
182202
183203 }
184204
185- public function passwordRecoveryAction ($ token = '' , Request $ request )
186- {
205+ public function passwordRecoveryAction ($ token = '' , Request $ request ) {
187206
188207 $ vars = array ();
189208
@@ -254,8 +273,7 @@ public function passwordRecoveryAction($token = '', Request $request)
254273 return $ this ->redirect ('/login? ' . $ request ->getQueryString ());
255274 }
256275
257- public function passwordResetAction (Request $ request )
258- {
276+ public function passwordResetAction (Request $ request ) {
259277 if ($ request ->getMethod () == 'POST ' ) {
260278 $ password = $ request ->request ->get ('password ' );
261279 $ rpassword = $ request ->request ->get ('rpassword ' );
0 commit comments