diff --git a/login/static/base.js b/login/static/base.js index 82aeb202d3b9e9c7556c80c0f593799d669aeb64..cf5278f6ba22c1f8d02ebba6367e1b7eaea54b2a 100644 --- a/login/static/base.js +++ b/login/static/base.js @@ -22,88 +22,85 @@ // Check if an auth flow is configured and redirect to auth page in that // case. function check_flow_auth() { - var state = Cookies.get('flow_state'); - var url = Cookies.get('auth_url'); + var state = Cookies.get('flow_state'); + var url = Cookies.get('auth_url'); - if (state == 'auth') { - Cookies.set('flow_state',''); - window.location.href = url; - } + if (state == 'auth') { + Cookies.set('flow_state',''); + window.location.href = url; + } } // Check if there if the flow is expired, if so, reset the cookie function check_flow_expired() { - var state = Cookies.get('flow_state'); + var state = Cookies.get('flow_state'); - if (state == 'flow_expired') { - Cookies.set('flow_state',''); - $("#contentFlowExpired").show(); - } + if (state == 'flow_expired') { + Cookies.set('flow_state',''); + $("#contentFlowExpired").show(); + } } // The script executed on login flows function flow_login() { - - var flow = $.urlParam('flow'); - var uri = api_url + 'self-service/login/flows?id=' + flow; - - // Query the Kratos backend to know what fields to render for the - // current flow - $.ajax( { - type: "GET", - url: uri, - success: function(data) { - - // Render login form (group: password) - var html = render_form(data, 'password'); - $("#contentLogin").html(html); - - }, - complete: function(obj) { - - // If we get a 410, the flow is expired, need to refresh the flow - if (obj.status == 410) { - Cookies.set('flow_state','flow_expired'); - // If we call the page without arguments, we get a new flow - window.location.href = 'login'; - } + var flow = $.urlParam('flow'); + var uri = api_url + 'self-service/login/flows?id=' + flow; + + // Query the Kratos backend to know what fields to render for the + // current flow + $.ajax( { + type: "GET", + url: uri, + success: function(data) { + + // Render login form (group: password) + var html = render_form(data, 'password'); + $("#contentLogin").html(html); + + }, + complete: function(obj) { + + // If we get a 410, the flow is expired, need to refresh the flow + if (obj.status == 410) { + Cookies.set('flow_state','flow_expired'); + // If we call the page without arguments, we get a new flow + window.location.href = 'login'; } - }); - + } + }); } // This is called after a POST on settings. It tells if the save was // successful and display / handles based on that outcome function flow_settings_validate() { - var flow = $.urlParam('flow'); - var uri = api_url + 'self-service/settings/flows?id=' + flow; - - $.ajax( { - type: "GET", - url: uri, - success: function(data) { - - // We had success. We save that fact in our flow_state - // cookie and regenerate a new flow - if (data.state == 'success') { - Cookies.set('flow_state', 'settings_saved'); - - // Redirect to generate new flow ID - window.location.href = 'settings'; - } - else { - - // There was an error, Kratos does not specify what is - // wrong. So we just show the general error message and - // let the user figure it out. We can re-use the flow-id - $("#contentProfileSaveFailed").show(); - } + var flow = $.urlParam('flow'); + var uri = api_url + 'self-service/settings/flows?id=' + flow; + + $.ajax( { + type: "GET", + url: uri, + success: function(data) { + + // We had success. We save that fact in our flow_state + // cookie and regenerate a new flow + if (data.state == 'success') { + Cookies.set('flow_state', 'settings_saved'); + + // Redirect to generate new flow ID + window.location.href = 'settings'; } - }); + else { + // There was an error, Kratos does not specify what is + // wrong. So we just show the general error message and + // let the user figure it out. We can re-use the flow-id + $("#contentProfileSaveFailed").show(); + } + } + }); } @@ -111,130 +108,127 @@ function flow_settings_validate() { // settings, like name and password. The form contents are defined by Kratos function flow_settings() { - // Get the details from the current flow from kratos - var flow = $.urlParam('flow'); - var uri = api_url + 'self-service/settings/flows?id=' + flow; - - $.ajax( { - type: "GET", - url: uri, - success: function(data) { - - var state = Cookies.get('flow_state') - - // If we have confirmation the settings are saved, show the - // notification - if (state == 'settings_saved') { - $("#contentProfileSaved").show(); - Cookies.set('flow_state', 'settings'); - } - - // Hide prfile section if we are in recovery state - // so the user is not confused by other fields. The user - // probably want to setup a password only first. - if (state == 'recovery') { - $("#contentProfile").hide(); - } - - - // Render the password & profile form based on the fields we got - // from the API - var html = render_form(data, 'password'); - $("#contentPassword").html(html); - - html = render_form(data, 'profile'); - $("#contentProfile").html(html); - - // If the submit button is hit, execute the POST with Ajax. - $("#formpassword").submit(function(e) { - - // avoid to execute the actual submit of the form. - e.preventDefault(); - - var form = $(this); - var url = form.attr('action'); - - $.ajax({ - type: "POST", - url: url, - data: form.serialize(), - complete: function(obj) { - // Validate the settings - flow_settings_validate(); - }, - }); - }); - + // Get the details from the current flow from kratos + var flow = $.urlParam('flow'); + var uri = api_url + 'self-service/settings/flows?id=' + flow; + $.ajax( { + type: "GET", + url: uri, + success: function(data) { - }, - complete: function(obj) { + var state = Cookies.get('flow_state') - // If we get a 410, the flow is expired, need to refresh the flow - if (obj.status == 410) { - Cookies.set('flow_state','flow_expired'); - window.location.href = 'settings'; - } + // If we have confirmation the settings are saved, show the + // notification + if (state == 'settings_saved') { + $("#contentProfileSaved").show(); + Cookies.set('flow_state', 'settings'); + } + // Hide prfile section if we are in recovery state + // so the user is not confused by other fields. The user + // probably want to setup a password only first. + if (state == 'recovery') { + $("#contentProfile").hide(); } - }); -} -function flow_recover() { - var flow = $.urlParam('flow'); - var uri = api_url + 'self-service/recovery/flows?id=' + flow; - - $.ajax( { - type: "GET", - url: uri, - success: function(data) { - - // Render the recover form, method 'link' - var html = render_form(data, 'link'); - $("#contentRecover").html(html); - - // Do form post as an AJAX call - $("#formlink").submit(function(e) { - - // avoid to execute the actual submit of the form. - e.preventDefault(); - - var form = $(this); - var url = form.attr('action'); - - // keep stat we are in recovery - Cookies.set('flow_state', 'recovery'); - $.ajax({ - type: "POST", - url: url, - data: form.serialize(), // serializes the form's elements. - success: function(data) - { - - // Show the request is sent out - $("#contentRecover").hide(); - $("#contentRecoverRequested").show(); - } - }); + // Render the password & profile form based on the fields we got + // from the API + var html = render_form(data, 'password'); + $("#contentPassword").html(html); + + html = render_form(data, 'profile'); + $("#contentProfile").html(html); + + // If the submit button is hit, execute the POST with Ajax. + $("#formpassword").submit(function(e) { + + // avoid to execute the actual submit of the form. + e.preventDefault(); + + var form = $(this); + var url = form.attr('action'); + + $.ajax({ + type: "POST", + url: url, + data: form.serialize(), + complete: function(obj) { + // Validate the settings + flow_settings_validate(); + }, }); + }); - }, - complete: function(obj) { - // If we get a 410, the flow is expired, need to refresh the flow - if (obj.status == 410) { - Cookies.set('flow_state','flow_expired'); - window.location.href = 'recovery'; + }, + complete: function(obj) { - } + // If we get a 410, the flow is expired, need to refresh the flow + if (obj.status == 410) { + Cookies.set('flow_state','flow_expired'); + window.location.href = 'settings'; } - }); + + } + }); + } +function flow_recover() { + var flow = $.urlParam('flow'); + var uri = api_url + 'self-service/recovery/flows?id=' + flow; + + $.ajax( { + type: "GET", + url: uri, + success: function(data) { + + // Render the recover form, method 'link' + var html = render_form(data, 'link'); + $("#contentRecover").html(html); + + // Do form post as an AJAX call + $("#formlink").submit(function(e) { + + // avoid to execute the actual submit of the form. + e.preventDefault(); + + var form = $(this); + var url = form.attr('action'); + + // keep stat we are in recovery + Cookies.set('flow_state', 'recovery'); + $.ajax({ + type: "POST", + url: url, + data: form.serialize(), // serializes the form's elements. + success: function(data) + { + + // Show the request is sent out + $("#contentRecover").hide(); + $("#contentRecoverRequested").show(); + } + }); + }); + + + }, + complete: function(obj) { + // If we get a 410, the flow is expired, need to refresh the flow + if (obj.status == 410) { + Cookies.set('flow_state','flow_expired'); + window.location.href = 'recovery'; + } + } + }); +} // Based on Kratos UI data and a group name, get the full form for that group. // kratos groups elements which belongs together in a group and should be posted @@ -266,7 +260,6 @@ function render_form(data, group) { } - // Return form element based on name, including help text (sub), placeholder etc. // Kratos give us form names and types and specifies what to render. However // it does not provide labels or translations. This function returns a HTML