Added login form with Javascript (example).

Updated feature and class comments.
This commit is contained in:
jvelilla
2015-04-22 18:40:36 -03:00
parent a56338ad17
commit fc4c2e76b6
19 changed files with 343 additions and 16 deletions

View File

@@ -1,6 +1,5 @@
note note
description: "Summary description for {CMS_BLOG}." description: "Summary description for {CMS_BLOG}."
author: ""
date: "$Date$" date: "$Date$"
revision: "$Revision$" revision: "$Revision$"

View File

@@ -1,6 +1,5 @@
note note
description: "Summary description for {CMS_BLOG_CONTENT_TYPE}." description: "Summary description for {CMS_BLOG_CONTENT_TYPE}."
author: ""
date: "$Date$" date: "$Date$"
revision: "$Revision$" revision: "$Revision$"

View File

@@ -1,6 +1,5 @@
note note
description: "Summary description for {CMS_BLOG_MODULE}." description: "Summary description for {CMS_BLOG_MODULE}."
author: ""
date: "$Date: 2015-02-13 13:08:13 +0100 (ven., 13 févr. 2015) $" date: "$Date: 2015-02-13 13:08:13 +0100 (ven., 13 févr. 2015) $"
revision: "$Revision: 96616 $" revision: "$Revision: 96616 $"

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,299 @@
var loginURL = "/login";
var logoutURL = "/logoff";
var userAgent = navigator.userAgent.toLowerCase();
var firstLogIn = true;
var login = function() {
var form = document.forms[0];
var username = form.username.value;
var password = form.password.value;
//var host = form.host.value;
var host = window.location.hostname;
var _login = function(){
if (document.getElementById('myModalFormId') !== null ) {
remove ('myModalFormId');
}
if (username === "" || password === "") {
if (document.getElementById('myModalFormId') === null ) {
var newdiv = document.createElement('div');
newdiv.innerHTML = "<br>Invalid Credentials</br>";
newdiv.id = 'myModalFormId';
$("body").append(newdiv);
}
}else{
//Instantiate HTTP Request
var request = ((window.XMLHttpRequest) ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP"));
request.open("GET", loginURL, true, username, password);
request.send(null);
//Process Response
request.onreadystatechange = function(){
if (request.readyState == 4) {
if (request.status==200) {
delete form
window.location=host.concat("/");
}
else{
if (navigator.userAgent.toLowerCase().indexOf("firefox") != -1){
}
if (document.getElementById('myModalFormId') === null ) {
var newdiv = document.createElement('div');
newdiv.innerHTML = "<br>Invalid Credentials</br>";
newdiv.id = 'myModalFormId';
$("body").append(newdiv);
}
}
}
}
}
}
var userAgent = navigator.userAgent.toLowerCase();
if (userAgent.indexOf("firefox") != -1){ //TODO: check version number
if (firstLogIn) _login();
else logoff(_login);
}
else{
_login();
}
if (firstLogIn) firstLogIn = false;
};
var login_with_redirect = function() {
var form = document.forms[2];
var username = form.username.value;
var password = form.password.value;
var host = form.host.value;
var _login = function(){
var redirectURL = form.redirect && form.redirect.value || "";
$("#imgProgressRedirect").show();
if (document.getElementById('myModalFormId') !== null ) {
remove ('myModalFormId');
}
if (username === "" || password === "") {
if (document.getElementById('myModalFormId') === null ) {
var newdiv = document.createElement('div');
newdiv.innerHTML = "<br>Invalid Credentials</br>";
newdiv.id = 'myModalFormId';
$("body").append(newdiv);
$("#imgProgressRedirect").hide();
}
}else{
//Instantiate HTTP Request
var request = ((window.XMLHttpRequest) ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP"));
request.open("GET", host.concat(loginURL), true, username, password);
request.send(null);
//Process Response
request.onreadystatechange = function(){
if (request.readyState == 4) {
if (request.status==200) {
if (redirectURL === "") {
window.location=host.concat("/");
} else {
window.location=host.concat(redirectURL);
}
}
else{
if (navigator.userAgent.toLowerCase().indexOf("firefox") != -1){
}
if (document.getElementById('myModalFormId') === null ) {
var newdiv = document.createElement('div');
newdiv.innerHTML = "<br>Invalid Credentials</br>";
newdiv.id = 'myModalFormId';
$("body").append(newdiv);
$("#imgProgressRedirect").hide();
}
}
}
}
}
}
var userAgent = navigator.userAgent.toLowerCase();
if (userAgent.indexOf("firefox") != -1){ //TODO: check version number
if (firstLogIn) _login();
else logoff(_login);
}
else{
_login();
}
if (firstLogIn) firstLogIn = false;
};
var logoff = function(callback){
var form = document.forms[0];
var host = form.host.value;
if (userAgent.indexOf("msie") != -1) {
document.execCommand("ClearAuthenticationCache");
}
else if (userAgent.indexOf("firefox") != -1){ //TODO: check version number
var request1 = new XMLHttpRequest();
var request2 = new XMLHttpRequest();
//Logout. Tell the server not to return the "WWW-Authenticate" header
request1.open("GET", host.concat(logoutURL) + "?prompt=false", true);
request1.send("");
request1.onreadystatechange = function(){
if (request1.readyState == 4) {
//Sign in with dummy credentials to clear the auth cache
request2.open("GET", host.concat(logoutURL), true, "logout", "logout");
request2.send("");
request2.onreadystatechange = function(){
if (request2.readyState == 4) {
if (callback!=null) { callback.call(); } else { window.location=host.concat(logoutURL);}
}
}
}
}
}
else {
var request = ((window.XMLHttpRequest) ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP"));
request.open("GET", host.concat(logoutURL), true, "logout", "logout");
request.send("");
request.onreadystatechange = function(){
if (request.status==401 || request.status==403 ) { window.location=host.concat(logoutURL);
}
}
}
};
function remove(id)
{
var element = document.getElementById(id);
element.outerHTML = "";
delete element;
return;
};
$(document).ready(function() {
if (typeof String.prototype.contains != 'function') {
String.prototype.contains = function (str){
return this.indexOf(str) != -1;
};
}
progressive_loging();
});
var progressive_loging = function () {
login_href();
};
var OnOneClick = function(event) {
event.preventDefault();
if ( document.forms[0] === undefined ) {
create_form();
}
this.focus;
return false;
};
var login_href = function() {
var els = document.getElementsByTagName("a");
for (var i = 0, l = els.length; i < l; i++) {
var el = els[i];
if (el.href.contains("/basic_auth_login?destination")) {
loginURL = el.href;
var OneClick = el;
OneClick.addEventListener('click', OnOneClick, false);
}
}
};
var create_form = function() {
// Fetching HTML Elements in Variables by ID.
var createform = document.createElement('form'); // Create New Element Form
createform.setAttribute("action", ""); // Setting Action Attribute on Form
createform.setAttribute("method", "post"); // Setting Method Attribute on Form
$("body").append(createform);
var heading = document.createElement('h2'); // Heading of Form
heading.innerHTML = "Login Form ";
createform.appendChild(heading);
var line = document.createElement('hr'); // Giving Horizontal Row After Heading
createform.appendChild(line);
var linebreak = document.createElement('br');
createform.appendChild(linebreak);
var namelabel = document.createElement('label'); // Create Label for Name Field
namelabel.innerHTML = "Username : "; // Set Field Labels
createform.appendChild(namelabel);
var inputelement = document.createElement('input'); // Create Input Field for UserName
inputelement.setAttribute("type", "text");
inputelement.setAttribute("name", "username");
inputelement.setAttribute("required","required");
createform.appendChild(inputelement);
var linebreak = document.createElement('br');
createform.appendChild(linebreak);
var passwordlabel = document.createElement('label'); // Create Label for Password Field
passwordlabel.innerHTML = "Password : ";
createform.appendChild(passwordlabel);
var passwordelement = document.createElement('input'); // Create Input Field for Password.
passwordelement.setAttribute("type", "password");
passwordelement.setAttribute("name", "password");
passwordelement.setAttribute("id", "password");
passwordelement.setAttribute("required","required");
createform.appendChild(passwordelement);
var passwordbreak = document.createElement('br');
createform.appendChild(passwordbreak);
var submitelement = document.createElement('button'); // Append Submit Button
submitelement.setAttribute("type", "button");
submitelement.setAttribute("onclick", "login();");
submitelement.innerHTML = "Sign In ";
createform.appendChild(submitelement);
};

View File

@@ -1,11 +1,14 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<!-- EWF CMS --> <!-- EWF CMS -->
<link rel="stylesheet" href="{$site_url/}/theme/css/style.css"> <link rel="stylesheet" href="{$site_url/}/theme/css/style.css">
<link rel="stylesheet" href="{$site_url/}/theme/css/node.css"> <link rel="stylesheet" href="{$site_url/}/theme/css/node.css">
<script src="{$site_url/}/theme/js/jquery-1.10.2.min.js"></script>
<script src="{$site_url/}/theme/js/roc_auth.js"></script>
<!-- bootstrap framework --> <!-- bootstrap framework -->
<!-- Latest compiled and minified CSS --> <!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">

View File

@@ -46,6 +46,7 @@ feature -- Access: content
feature -- Element change feature -- Element change
set_all_content (a_content: like content; a_summary: like summary; a_format: like format) set_all_content (a_content: like content; a_summary: like summary; a_format: like format)
-- <Precursor>
do do
set_content (a_content) set_content (a_content)
set_summary (a_summary) set_summary (a_summary)

View File

@@ -62,6 +62,7 @@ feature -- Status report
end end
has (lnk: CMS_LINK): BOOLEAN has (lnk: CMS_LINK): BOOLEAN
-- Has the current Menu a link `lnk'.
do do
across across
items as ic items as ic
@@ -87,6 +88,7 @@ feature -- Element change
end end
set_title (t: like title) set_title (t: like title)
-- Set `title' with `t'.
do do
title := t title := t
end end

View File

@@ -137,6 +137,8 @@ feature -- Access
build_auth_engine build_auth_engine
do do
to_implement ("Not implemented authentication") to_implement ("Not implemented authentication")
-- Note: we can remoce this feature, unless we want to
-- provide a custom auth strategy.
end end
build_mailer build_mailer
@@ -157,7 +159,7 @@ feature -- Element change
modules.extend (m) modules.extend (m)
end end
feature -- Compute location feature -- Theme: Compute location
compute_theme_location compute_theme_location
do do

View File

@@ -1,5 +1,7 @@
note note
description: "Class that enable to set basic configuration, application layout, core modules and themes." description: "[
Class that enable to set basic configuration, application layout, core modules and themes.
]"
date: "$Date: 2015-02-13 13:08:13 +0100 (ven., 13 févr. 2015) $" date: "$Date: 2015-02-13 13:08:13 +0100 (ven., 13 févr. 2015) $"
revision: "$Revision: 96616 $" revision: "$Revision: 96616 $"
@@ -104,10 +106,12 @@ feature -- Access: Theme
feature -- Access: storage feature -- Access: storage
storage_drivers: STRING_TABLE [CMS_STORAGE_BUILDER] storage_drivers: STRING_TABLE [CMS_STORAGE_BUILDER]
--
deferred deferred
end end
storage (a_error_handler: ERROR_HANDLER): detachable CMS_STORAGE storage (a_error_handler: ERROR_HANDLER): detachable CMS_STORAGE
-- Retrieve current CMS_STORAGE strategy based on a configuration file.
local local
retried: BOOLEAN retried: BOOLEAN
l_message: STRING l_message: STRING
@@ -146,20 +150,24 @@ feature -- Access: storage
retry retry
end end
feature -- Element change feature -- Status Report: Modules
module_registered (m: CMS_MODULE): BOOLEAN module_registered (m: CMS_MODULE): BOOLEAN
-- Is the module `m' registered?
do do
Result := modules.has (m) Result := modules.has (m)
end end
module_with_same_type_registered (m: CMS_MODULE): BOOLEAN module_with_same_type_registered (m: CMS_MODULE): BOOLEAN
-- Is there a module `m' already registered with the same type?
do do
Result := modules.has_module_with_same_type (m) Result := modules.has_module_with_same_type (m)
end end
feature -- Element change
register_module (m: CMS_MODULE) register_module (m: CMS_MODULE)
-- Add module `m' to `modules' -- Add module `m' to `modules'.
require require
module_not_registered: not module_registered (m) module_not_registered: not module_registered (m)
no_module_with_same_type_registered: not module_with_same_type_registered (m) no_module_with_same_type_registered: not module_with_same_type_registered (m)

View File

@@ -1,5 +1,7 @@
note note
description: "Summary description for {CMS_BLOCK_REGION}." description: "[
Describe where the block should appear on a site.
]"
date: "$Date: 2014-11-13 16:23:47 +0100 (jeu., 13 nov. 2014) $" date: "$Date: 2014-11-13 16:23:47 +0100 (jeu., 13 nov. 2014) $"
class class
@@ -19,12 +21,16 @@ feature {NONE} -- Initialization
feature -- Access feature -- Access
name: READABLE_STRING_8 name: READABLE_STRING_8
-- Block region name.
blocks: ARRAYED_LIST [CMS_BLOCK] blocks: ARRAYED_LIST [CMS_BLOCK]
-- List of blocks.
feature -- Element change feature -- Element change
extend (b: CMS_BLOCK) extend (b: CMS_BLOCK)
-- Add a block `b' to the list of `blocks'.
do do
blocks.force (b) blocks.force (b)
end end

View File

@@ -37,12 +37,15 @@ feature {NONE} -- Initialization
feature -- Access feature -- Access
name: READABLE_STRING_8 name: READABLE_STRING_8
-- <Precursor>
title: detachable READABLE_STRING_32 title: detachable READABLE_STRING_32
-- <Precursor>
content: READABLE_STRING_8 content: READABLE_STRING_8
format: detachable CONTENT_FORMAT format: detachable CONTENT_FORMAT
--
feature -- Status report feature -- Status report

View File

@@ -1,6 +1,5 @@
note note
description: "Summary description for {CMS_ENCODERS}." description: "Summary description for {CMS_ENCODERS}."
author: ""
date: "$Date: 2015-02-13 13:08:13 +0100 (ven., 13 févr. 2015) $" date: "$Date: 2015-02-13 13:08:13 +0100 (ven., 13 févr. 2015) $"
revision: "$Revision: 96616 $" revision: "$Revision: 96616 $"
@@ -9,7 +8,7 @@ class
inherit inherit
ANY ANY
SHARED_HTML_ENCODER SHARED_HTML_ENCODER
export export
{NONE} all {NONE} all

View File

@@ -1,6 +1,5 @@
note note
description: "Summary description for {CMS_FORMATS}." description: "Summary description for {CMS_FORMATS}."
author: ""
date: "$Date: 2014-11-13 16:23:47 +0100 (jeu., 13 nov. 2014) $" date: "$Date: 2014-11-13 16:23:47 +0100 (jeu., 13 nov. 2014) $"
revision: "$Revision: 96085 $" revision: "$Revision: 96085 $"
@@ -26,6 +25,8 @@ feature -- Access
all_formats: LIST [CONTENT_FORMAT] all_formats: LIST [CONTENT_FORMAT]
once once
-- Can we provide an external file to read the
-- supported formats?
create {ARRAYED_LIST [CONTENT_FORMAT]} Result.make (3) create {ARRAYED_LIST [CONTENT_FORMAT]} Result.make (3)
Result.force (plain_text) Result.force (plain_text)
Result.force (full_html) Result.force (full_html)

View File

@@ -1,5 +1,7 @@
note note
description: "Processes a HTTP request's BASIC authorization headers, putting the result into the execution variable user." description: "[
Processes a HTTP request's BASIC authorization headers, putting the result into the execution variable user.
]"
date: "$Date: 2015-02-13 13:08:13 +0100 (ven., 13 févr. 2015) $" date: "$Date: 2015-02-13 13:08:13 +0100 (ven., 13 févr. 2015) $"
revision: "$Revision: 96616 $" revision: "$Revision: 96616 $"

View File

@@ -1,6 +1,5 @@
note note
description: "Summary description for {CMS_PAGE_CONTENT_TYPE}." description: "Summary description for {CMS_PAGE_CONTENT_TYPE}."
author: ""
date: "$Date$" date: "$Date$"
revision: "$Revision$" revision: "$Revision$"

View File

@@ -1,6 +1,5 @@
note note
description: "Summary description for {WSF_CMS_THEME}." description: "Summary description for {WSF_CMS_THEME}."
author: ""
date: "$Date$" date: "$Date$"
revision: "$Revision$" revision: "$Revision$"

View File

@@ -1,6 +1,5 @@
note note
description: "Summary description for {CMS_USER_STORAGE_I}." description: "Summary description for {CMS_USER_STORAGE_I}."
author: ""
date: "$Date: 2015-01-27 19:15:02 +0100 (mar., 27 janv. 2015) $" date: "$Date: 2015-01-27 19:15:02 +0100 (mar., 27 janv. 2015) $"
revision: "$Revision: 96542 $" revision: "$Revision: 96542 $"