Skip to content

Commit f3334e6

Browse files
committed
New changes.
1 parent 988168a commit f3334e6

File tree

26 files changed

+227
-268
lines changed

26 files changed

+227
-268
lines changed

async/controllers/default.js

Lines changed: 87 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,64 +1,131 @@
11
exports.install = function() {
2-
F.route('/', view_index);
2+
F.route('/', json_index);
3+
4+
// Recommend:
5+
F.route('/array/', json_array);
6+
F.route('/array2/', json_array2);
7+
F.route('/number/', json_number);
38
};
49

5-
function view_index() {
10+
function json_index() {
611

712
var self = this;
8-
var builder = [];
9-
var async = new Utils.Async();
13+
var response = [];
14+
var async = new U.Async();
1015

1116
async.await(function(complete) {
12-
utils.request('https://www.google.com', ['get'], null, function(err, data) {
17+
U.request('https://www.google.com', ['get'], function(err, data) {
1318
var output = err ? 'error' : data.length.toString();
14-
builder.push('www.google.com -> ' + output);
19+
response.push('www.google.com -> ' + output);
1520
complete();
1621
});
1722
});
1823

1924
async.await(function(complete) {
20-
utils.request('http://www.expressjs.com', ['get'], null, function(err, data) {
25+
U.request('http://www.expressjs.com', ['get'], function(err, data) {
2126
var output = err ? 'error' : data.length.toString();
22-
builder.push('www.expressjs.com -> ' + output);
27+
response.push('www.expressjs.com -> ' + output);
2328
complete();
2429
});
2530
});
2631

2732
async.await(function(complete) {
28-
utils.request('http://www.yahoo.com', ['get'], null, function(err, data) {
33+
U.request('http://www.yahoo.com', ['get'], function(err, data) {
2934
var output = err ? 'error' : data.length.toString();
30-
builder.push('www.yahoo.com -> ' + output);
35+
response.push('www.yahoo.com -> ' + output);
3136
complete();
3237
});
3338
});
3439

3540
async.await('partial', function(complete) {
36-
utils.request('http://www.totaljs.com', ['get'], null, function(err, data) {
41+
U.request('http://www.totaljs.com', ['get'], function(err, data) {
3742
var output = err ? 'error' : data.length.toString();
38-
builder.push('www.totaljs.com -> ' + output);
43+
response.push('www.totaljs.com -> ' + output);
3944
complete();
4045
});
4146
});
4247

4348
// waiting for await('partial')
4449
async.wait('waiting 1', 'partial', function(complete) {
4550
console.log('waiting 1 complete');
46-
setTimeout(function() {
47-
complete();
48-
}, 1000);
51+
setTimeout(() => complete(), 1000);
4952
});
5053

5154
// waiting for wait('waiting')
5255
async.wait('waiting 2', 'waiting 1', function(complete) {
5356
console.log('waiting 2 complete');
54-
setTimeout(function() {
55-
complete();
56-
}, 1000);
57+
setTimeout(() => complete(), 1000);
5758
});
5859

5960
async.run(function() {
6061
if (self.xhr)
61-
return self.json(builder);
62-
self.view('index', builder);
62+
return self.json(response);
63+
self.view('index', response);
64+
});
65+
}
66+
67+
function json_array() {
68+
var async = [];
69+
var response = [];
70+
var self = this;
71+
72+
async.push(function(next) {
73+
U.request('https://www.google.com', ['get'], function(err, data) {
74+
var output = err ? 'error' : data.length.toString();
75+
response.push('www.google.com -> ' + output);
76+
next();
77+
});
78+
});
79+
80+
async.push(function(next) {
81+
U.request('http://www.expressjs.com', ['get'], function(err, data) {
82+
var output = err ? 'error' : data.length.toString();
83+
response.push('www.expressjs.com -> ' + output);
84+
next();
85+
});
86+
});
87+
88+
async.push(function(next) {
89+
U.request('http://www.yahoo.com', ['get'], function(err, data) {
90+
var output = err ? 'error' : data.length.toString();
91+
response.push('www.yahoo.com -> ' + output);
92+
next();
93+
});
6394
});
95+
96+
async.async(() => self.json(response));
97+
}
98+
99+
function json_array2() {
100+
var url = ['https://www.google.com', 'http://www.expressjs.com', 'http://www.yahoo.com'];
101+
var response = [];
102+
var self = this;
103+
104+
url.wait(function(item, next) {
105+
U.request(item, ['get'], function(err, data) {
106+
var output = err ? 'error' : data.length.toString();
107+
response.push(item + ' -> ' + output);
108+
next();
109+
});
110+
}, () => self.json(response));
111+
}
112+
113+
function json_number() {
114+
115+
var self = this;
116+
var response = [];
117+
var url = ['https://www.google.com', 'http://www.expressjs.com', 'http://www.yahoo.com'];
118+
var count = url.length;
119+
120+
count.async(function(index, next) {
121+
122+
index -= 1;
123+
124+
U.request(url[index], ['get'], function(err, data) {
125+
var output = err ? 'error' : data.length.toString();
126+
response.push(url[index] + ' -> ' + output);
127+
next();
128+
});
129+
130+
}, () => self.json(response));
64131
}

authorization/config-debug

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name : total.js
1+
name : Total.js
22
secret : secret-key-for-signature
33

44
// session cookie name

authorization/controllers/default.js

Lines changed: 5 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
exports.install = function() {
22
F.route('/', view_logged, ['authorize']);
33
F.route('/', view_homepage);
4-
F.route('/', json_homepage, ['xhr', 'post']);
5-
F.route('/logout/', logout, ['authorize', 'get']);
4+
F.route('/', json_login, ['post', '*User']);
5+
F.route('/logout/', logout, ['authorize']);
66
};
77

88
function view_logged() {
@@ -12,39 +12,12 @@ function view_logged() {
1212

1313
function view_homepage() {
1414
var self = this;
15-
self.view('homepage', { LoginName: '@' });
15+
self.view('homepage', { email: '@' });
1616
}
1717

18-
function json_homepage() {
19-
18+
function json_login() {
2019
var self = this;
21-
var error = self.validate(self.post, ['LoginName', 'LoginPassword']);
22-
23-
if (self.user !== null)
24-
error.add('Logged');
25-
26-
if (error.hasError()) {
27-
self.json(error);
28-
return;
29-
}
30-
31-
var db = self.database('users');
32-
db.one(n => n.email === self.body.LoginName && n.password === self.body.LoginPassword, function(err, user) {
33-
34-
if (user === null) {
35-
error.add('LoginError');
36-
self.json(error);
37-
return;
38-
}
39-
40-
self.database('users-logs').insert({ id: user.id, email: user.email, ip: self.req.ip, date: new Date() });
41-
42-
// Save to cookie
43-
self.res.cookie(F.config.cookie, F.encrypt({ id: user.id, ip: self.req.ip }, 'user'), new Date().add('5 minutes'));
44-
45-
// Return result
46-
self.json({ r: true });
47-
});
20+
self.body.$workflow('login', self, self.callback());
4821
}
4922

5023
function logout() {

authorization/definitions/authorization.js

Lines changed: 13 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -5,47 +5,33 @@
55
F.onAuthorize = function(req, res, flags, callback) {
66

77
var cookie = req.cookie(F.config.cookie);
8-
if (cookie === null || cookie.length < 10) {
8+
if (!cookie || cookie.length < 10) {
99
callback(false);
1010
return;
1111
}
1212

1313
var obj = F.decrypt(cookie, 'user');
1414

15-
if (obj === null || obj === '' || obj.ip !== req.ip) {
15+
if (!obj || obj.ip !== req.ip) {
1616
callback(false);
1717
return;
1818
}
1919

2020
var user = F.cache.read('user_' + obj.id);
21-
if (user !== null) {
21+
if (user) {
2222
req.user = user;
2323
callback(true);
2424
return;
2525
}
2626

27-
var db = F.database('users');
28-
29-
// find the user in database
30-
db.one(n => n.id === obj.id, function(err, user) {
31-
32-
if (user === null) {
33-
callback(false);
34-
return;
35-
}
36-
37-
F.cache.add('user_' + user.id, user, new Date().add('m', 5));
38-
callback(true, user);
27+
NOSQL('users').find().make(function(builder) {
28+
builder.where('id', obj.id);
29+
builder.first();
30+
builder.callback(function(err, response) {
31+
if (!response)
32+
return callback(false);
33+
F.cache.add('user_' + response.id, response, '5 minutes');
34+
callback(true, response);
35+
});
3936
});
40-
41-
};
42-
43-
44-
F.onValidation = function(name, value) {
45-
switch (name) {
46-
case 'LoginName':
47-
return U.isEmail(value);
48-
case 'LoginPassword':
49-
return value.length > 0;
50-
};
51-
}
37+
};

authorization/models/user.js

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
NEWSCHEMA('User').make(function(schema) {
2+
3+
schema.define('email', 'Email', true);
4+
schema.define('password', 'String(30)', true);
5+
6+
schema.addWorkflow('login', function(error, model, controller, callback) {
7+
8+
NOSQL('users').find().make(function(builder) {
9+
builder.first();
10+
builder.where('email', model.email);
11+
builder.where('password', model.password);
12+
builder.callback(function(err, response) {
13+
14+
if (!response) {
15+
error.push('error-user-404');
16+
return callback();
17+
}
18+
19+
// Writes logs
20+
NOSQL('users-logs').insert({ id: response.id, email: response.email, ip: controller.ip, date: new Date() });
21+
22+
// Sets cookies
23+
controller.cookie(F.config.cookie, F.encrypt({ id: response.id, ip: controller.ip }, 'user'), '5 minutes');
24+
25+
// Responds
26+
callback(SUCCESS(true));
27+
28+
}, error);
29+
});
30+
});
31+
32+
});
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
LoginName : please fill login name
22
LoginPassword : please fill login password
33
LoginError : your login is not valid
4-
Logged : you are still logged
4+
Logged : you are still logged
5+
6+
error-user-404 : User not found.

authorization/views/homepage.html

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,24 +21,24 @@
2121
<form action="#" method="POST" id="f">
2222
<div>
2323
<div>Login name:</div>
24-
<div><input type="text" name="LoginName" value="@{model.LoginName}" maxlength="200" /></div>
24+
<div><input type="text" name="email" value="@{model.email}" maxlength="200" /></div>
2525
</div>
2626
<br />
2727
<div>
2828
<div>Login password:</div>
29-
<div><input type="text" name="LoginPassword" value="" maxlength="30" /></div>
29+
<div><input type="text" name="password" value="" maxlength="30" /></div>
3030
</div>
3131
<div id="error"></div>
3232
</form>
3333
<br />
3434
<button>Submit</button>
3535

36-
<script type="text/javascript">
36+
<script>
3737
$(document).ready(function() {
3838
$('button').bind('click', function() {
39-
$.post('/?ts=' + new Date().getTime(), $('#f').serialize(), function(d) {
39+
$.post('/?ts=' + Date.now(), $('#f').serialize(), function(d) {
4040
var err = $('#error');
41-
41+
4242
if (d instanceof Array) {
4343

4444
err.empty();

cache-partial/controllers/default.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ function view_homepage_cached() {
1111

1212
var item = F.cache.get(key);
1313

14-
if (item === null) {
14+
if (!item) {
1515
var date = new Date();
1616
item = date.toString();
17-
F.cache.add(key, item, date.add('5 minutes'));
17+
F.cache.add(key, item, '5 minutes');
1818
}
1919

2020
// press 15x refresh browser

contact-form/controllers/default.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
exports.install = function() {
22
F.route('/', view_form);
3-
F.route('/', json_form, ['xhr', 'post', '*ContactForm']);
3+
F.route('/', json_form, ['post', '*ContactForm']);
44
};
55

66
function view_form() {

0 commit comments

Comments
 (0)