/
userdb.demo.js
57 lines (39 loc) · 1.74 KB
/
userdb.demo.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
/*jslint indent: 2, maxlen: 80, continue: false, unparam: false, node: true */
/* -*- tab-width: 2 -*- */
'use strict';
var makeTokenObj = require('tokenobj'), usersDb = require('demofake-userdb')(),
flags = {
admin: makeTokenObj('User is an administrator'),
member: makeTokenObj('User has registered'),
},
realRank, fakeRank, D = require('./lib_demo.js');
usersDb.hasRank = usersDb.hasPropEql.bind(usersDb, 'rank');
usersDb.addUsersFromFile('admins', { rank: flags.admin });
usersDb.addUsersFromFile('members', { rank: flags.member });
usersDb.addUsersFromFile('guests');
console.log(String(usersDb));
//= `[DemoFakeUserDb: 4 users: Ash, Pinky, Brain, RandomJ]`
D.annot("An admin record as JSON:");
D.jsonDump(usersDb.getUser('Ash'));
//= `{ "nick": "Ash",`
//= ` "icon": 42,`
//= ` "mail": "ash@example.net",`
//= ` "rank": { "tokenPurpose": "User is an administrator" } }`
D.annot("Although the token is represented in a meaningful way,");
D.annot("JSON can't transport its real uniqueness:");
D.jsonDump(usersDb.getUser('RandomJ'));
//= `{ "nick": "RandomJ",`
//= ` "icon": 23,`
//= ` "rank": { "tokenPurpose": "User is an administrator" },`
//= ` "mail": "random.j.hax0r@example.net" }`
D.annot("But since that limitation applies to input as well,");
D.annot("it can't be forged that way:");
realRank = usersDb.getUser('Ash').rank;
fakeRank = usersDb.getUser('RandomJ').rank;
D.vEqualStr.log(realRank, fakeRank);
//= `[Token: User is an administrator] !== [object Object]`
D.annot("Neither can it be forged by an evil 3rd party module:");
fakeRank = makeTokenObj(flags.admin.tokenPurpose);
D.vEqualStr.log(realRank, fakeRank);
//= `[Token: User is an administrator] !== [Token: User is an administrator]`
/*scroll*/