# HG changeset patch
# User Florent Aide <florent.aide@gmail.com>
# Date 1433426914 -7200
#      Thu Jun 04 16:08:34 2015 +0200
# Branch odoo8
# Node ID 124719382328aca62d4a546c98619d3a30787287
# Parent  bdbff56c3c0f6e65abdf5112f52091b768d59d96
Proper state handling and removed debug prints

diff --git a/controllers/main.py b/controllers/main.py
--- a/controllers/main.py
+++ b/controllers/main.py
@@ -96,6 +96,21 @@
 
 class AuthSAMLController(http.Controller):
 
+    def get_state(self, provider_id):
+        redirect = request.params.get('redirect') or 'web'
+        if not redirect.startswith(('//', 'http://', 'https://')):
+            redirect = '%s%s' % (
+                request.httprequest.url_root,
+                redirect[1:] if redirect[0] == '/' else redirect
+            )
+
+        state = {
+            "d": request.session.db,
+            "p": provider_id,
+            "r": werkzeug.url_quote_plus(redirect),
+        }
+        return state
+
     @http.route('/auth_saml/get_auth_request', type='http', auth='none')
     def get_auth_request(self, pid):
         """state is the JSONified state object and we need to pass
@@ -106,11 +121,12 @@
         provider_osv = request.registry.get('auth.saml.provider')
 
         auth_request = None
+        state = self.get_state(provider_id)
 
         try:
             with request.registry.cursor() as cr:
                 auth_request = provider_osv._get_auth_request(
-                    cr, SUPERUSER_ID, provider_id, pid
+                    cr, SUPERUSER_ID, provider_id, state=state
                 )
 
         except Exception, e:
@@ -125,9 +141,6 @@
             }),
         }
         url = auth_request + "&" + werkzeug.url_encode(params)
-        print "*"*35
-        print url
-        print "*"*35
         redirect = werkzeug.utils.redirect(url, 303)
         redirect.autocorrect_location_header = True
         return redirect
@@ -152,11 +165,7 @@
             return redirect
 
         state = simplejson.loads(kw['RelayState'])
-        print "*"*35
-        print state
-        print "*"*35
-        # THIS IS FALSE TODO TODO
-        provider = state
+        provider = state['p']
 
         with request.registry.cursor() as cr:
             try:
@@ -172,10 +181,10 @@
                     url = '/#action=%s' % action
                 elif menu:
                     url = '/#menu_id=%s' % menu
-                return login_and_redirect(req, *credentials, redirect_url=url)
+
+                return login_and_redirect(*credentials, redirect_url=url)
 
             except AttributeError, e:
-                # print e
                 # auth_signup is not installed
                 _logger.error("auth_signup not installed on database "
                               "saml sign up cancelled.")