Skip to content

Commit 2818375

Browse files
committed
new version
acl, param to routes, route in post
1 parent 402378e commit 2818375

File tree

20 files changed

+1528
-149
lines changed

20 files changed

+1528
-149
lines changed

assets/page/torito/img/setup.png

9.37 KB
Loading

assets/page/torito/login.html

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
<!doctype html>
2+
<html>
3+
<head>
4+
<script src="/load?file=./assets/page/torito/js/import.js"></script>
5+
6+
<style>
7+
body {
8+
font-family:Tahoma;
9+
background-color: #498fff;
10+
}
11+
</style>
12+
<script>
13+
window.addEventListener("load",function() {
14+
document.getElementById("frmLogin_btnEnter").addEventListener("click",function() {
15+
Import({url:"/acl",method:"post",data:{
16+
action:"login",
17+
username:document.getElementById("frmLogin_txtUsername").value,
18+
password:document.getElementById("frmLogin_txtPassword").value
19+
}})
20+
.done(function(data) {
21+
data = JSON.parse(data);
22+
if(data.result) {
23+
window.location = "/route";
24+
}
25+
})
26+
.send();
27+
});
28+
});
29+
</script>
30+
</head>
31+
<body>
32+
<div id="top" style="">
33+
<table width="100%" style="background-color:transparent;border:none;" border=0>
34+
<tr>
35+
<td align="left">
36+
37+
</td>
38+
<td align="center" style="font-size:22px;">
39+
<table border=0>
40+
<tr>
41+
<td>
42+
<img src="assets/page/torito/img/icon.png" width="64"/>
43+
</td>
44+
</tr>
45+
<tr>
46+
<td align="right">
47+
<span style="font-size:12px;">username:</span><br/>
48+
<input tabindex=1 id="frmLogin_txtUsername" type="text"/>
49+
</td>
50+
</tr>
51+
<tr>
52+
<td align="right">
53+
<span style="font-size:12px;">password:</span><br/>
54+
<input tabindex=2 id="frmLogin_txtPassword" type="password"/>
55+
</td>
56+
</tr>
57+
<tr>
58+
<td align="right">
59+
<input id="frmLogin_btnEnter" tabindex=3 type="button" value="enter"/>
60+
</td>
61+
</tr>
62+
</table>
63+
</td>
64+
<td align="right">
65+
66+
</td>
67+
</tr>
68+
</table>
69+
</div>
70+
</body>
71+
</html>

index.js

Lines changed: 67 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,28 +11,94 @@ var routesDirectory = { get : "./meta/javascript/server/routes/get", post : "./m
1111
var serverPort = 3001;
1212
app = global.express();
1313
global.app = app;
14+
global.session.reset();
15+
16+
function guid() {
17+
function s4() {
18+
return Math.floor((1 + Math.random()) * 0x10000) .toString(16) .substring(1);
19+
}
20+
return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();
21+
}
22+
1423
app.use(function (req, res, next) {
1524
console.log("------------------------------------------------------------------------------------------------");
1625
console.log('Request URL:', req.originalUrl);
1726
console.log('Request Type:', req.method);
1827
console.log('Request Params:', req.params);
1928
console.log('Request Query:', req.query);
2029
console.log("------------------------------------------------------------------------------------------------");
30+
31+
var found = false;
32+
if("cookie" in req.headers) {
33+
req.cookies = global.cookie.parse(req.headers.cookie);
34+
if("session" in req.cookies) {
35+
var data = global.session.get( req.cookies.session );
36+
if(data != null) {
37+
req.session = data;
38+
data.date = new Date();
39+
found = true;
40+
}
41+
}
42+
}
43+
if(!found) {
44+
// find a available id
45+
var id = guid();
46+
while(true) {
47+
var data = global.session.get( id );
48+
if(data != null) {
49+
id = guid();
50+
} else {
51+
break;
52+
}
53+
}
54+
// create a new session
55+
var session = {
56+
logged : false,
57+
date : new Date()
58+
};
59+
global.session.set(id,session);
60+
res.setHeader('Set-Cookie', global.cookie.serialize("session",id));
61+
req.session = session;
62+
}
2163
next();
2264
});
2365

66+
67+
68+
2469
var builtin = {
2570
get : {},
2671
post : {},
2772
static : {}
2873
};
2974

75+
function readdirrecSync(dir,top) {
76+
top = top || "";
77+
var files = global.fs.readdirSync(dir);
78+
var ret = [];
79+
for(var x in files) {
80+
if( global.fs.lstatSync(dir + "/" + files[x]).isDirectory() ) {
81+
var r = readdirrecSync(dir + "/" + files[x],files[x] + "/");
82+
ret = ret.concat(r);
83+
} else {
84+
ret.push(top + files[x]);
85+
}
86+
}
87+
return ret;
88+
}
3089
for(var dir in routesDirectory) {
31-
arrv = global.fs.readdirSync(escape(routesDirectory[dir]));
90+
arrv = readdirrecSync(routesDirectory[dir]);
3291
for(var file in arrv) {
3392
if(dir == "get" || dir == "post") {
3493
if( arrv[file].lastIndexOf(".jsf") == arrv[file].length-4 ) {
3594
var name = arrv[file].substring(0,arrv[file].length-4);
95+
var names = name.split("/");
96+
for(var x = 0; x < names.length;x++) {
97+
if(names[x].indexOf("__param__")==0) {
98+
names[x] = unescape( names[x].substring("__param__".length) );
99+
}
100+
}
101+
name = names.join("/");
36102
try {
37103
eval("builtin."+dir+"[ \"/\" + name ] = " + global.fs.readFileSync(routesDirectory[dir] + "/"+arrv[file],"utf8"));
38104
} catch(e) {
Lines changed: 171 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,171 @@
1+
<!doctype html>
2+
<html>
3+
<head>
4+
<script src="/load?file=./assets/page/torito/js/import.js"></script>
5+
<script src="/load?file=./assets/page/torito/js/querystring.js"></script>
6+
7+
<style type="text/css">
8+
body {
9+
font-family:Tahoma;
10+
background-color: #498fff;
11+
}
12+
.datatable {
13+
background-color: #fff;
14+
border:solid 1px #000;
15+
padding:5px;
16+
}
17+
.caption {
18+
font-size:20px;
19+
background-color:black;
20+
color:white;
21+
}
22+
</style>
23+
<script>
24+
function removeUserSet(target,username) {
25+
target.addEventListener("click",function() {
26+
if(username == "root") {
27+
alert("you can't remove root, for security reasons.");
28+
return;
29+
}
30+
if( confirm("are you sure you want to remove '" + username + "'?") ) {
31+
Import({url:"/acl",method:"post",data:{
32+
action:"remove",
33+
username : username
34+
}})
35+
.done(function(data) {
36+
alert(data);
37+
window.location.reload();
38+
})
39+
.send();
40+
}
41+
});
42+
}
43+
window.addEventListener("load",function() {
44+
Import({url:"/acl",method:"post",data:{action:"login",username:"root",password:"pass"}})
45+
.done(function(data) {
46+
//alert(data);
47+
data = JSON.parse(data);
48+
if(data.result) {
49+
Import({url:"/acl",method:"post",data:{action:"list"}})
50+
.done(function(data) {
51+
data = JSON.parse(data);
52+
var dir = document.getElementById("dir");
53+
dir.innerHTML = "";
54+
var table = document.createElement("table");
55+
table.setAttribute("border","1");
56+
table.setAttribute("width","300");
57+
table.setAttribute("class","datatable");
58+
59+
var tr = document.createElement("tr");
60+
var td = document.createElement("td");
61+
td.setAttribute("class","caption");
62+
td.innerHTML = "username";
63+
tr.appendChild(td);
64+
65+
var td = document.createElement("td");
66+
td.setAttribute("class","caption");
67+
td.innerHTML = "password";
68+
tr.appendChild(td);
69+
70+
var td = document.createElement("td");
71+
td.setAttribute("class","caption");
72+
td.innerHTML = "level";
73+
tr.appendChild(td);
74+
75+
table.appendChild(tr);
76+
77+
for(var user in data.users) {
78+
var tr = document.createElement("tr");
79+
var td = document.createElement("td");
80+
td.innerHTML = user;
81+
tr.appendChild(td);
82+
83+
var td = document.createElement("td");
84+
td.innerHTML = data.users[user].password;
85+
tr.appendChild(td);
86+
87+
var td = document.createElement("td");
88+
td.innerHTML = data.users[user].level;
89+
tr.appendChild(td);
90+
91+
var td = document.createElement("td");
92+
td.innerHTML = "remove";
93+
removeUserSet(td,user);
94+
tr.appendChild(td);
95+
96+
table.appendChild(tr);
97+
}
98+
dir.appendChild(table);
99+
100+
})
101+
.send();
102+
}
103+
104+
})
105+
.send();
106+
document.getElementById("frmNewUser_btnCreate").addEventListener("click",function() {
107+
Import({url:"/acl",method:"post",data:{
108+
action:"register",
109+
username : document.getElementById("frmNewUser_txtUsername").value,
110+
password : document.getElementById("frmNewUser_txtPassword").value,
111+
level : document.getElementById("frmNewUser_txtLevel").value
112+
}})
113+
.done(function(data) {
114+
window.location.reload();
115+
})
116+
.send();
117+
});
118+
});
119+
</script>
120+
</head>
121+
<body>
122+
<div id="top" style="">
123+
<table width="100%" style="background-color:transparent;border:none;">
124+
<tr>
125+
<td align="left">
126+
<img src="assets/page/torito/img/icon.png" width="64"/>
127+
</td>
128+
<td align="center" style="font-size:22px;">
129+
[ <a href="/route">routes</a> ] [ <a href="/logout">logout</a> ]
130+
</td>
131+
<td align="right">
132+
133+
</td>
134+
</tr>
135+
</table>
136+
137+
</div>
138+
<div>
139+
<div style="font-size:30px;">
140+
Users
141+
</div>
142+
<div id="dir">
143+
144+
</div>
145+
</div>
146+
<div>
147+
<div style="font-size:30px;">
148+
New User
149+
</div>
150+
<table class="datatable">
151+
<tr>
152+
<td>Username:</td>
153+
<td><input id="frmNewUser_txtUsername" type="text"/></td>
154+
</tr>
155+
<tr>
156+
<td>Password:</td>
157+
<td><input id="frmNewUser_txtPassword" type="text"/></td>
158+
</tr>
159+
<tr>
160+
<td>Level:</td>
161+
<td><input id="frmNewUser_txtLevel" type="text" value="0"/></td>
162+
</tr>
163+
<tr>
164+
<td></td>
165+
<td><input id="frmNewUser_btnCreate" type="button" value="create"/></td>
166+
</tr>
167+
</table>
168+
</div>
169+
170+
</body>
171+
</html>

0 commit comments

Comments
 (0)