1 | var http = require("http");
|
2 | var path = require("path");
|
3 | var fs = require("fs");
|
4 | var util = require("../util/util");
|
5 | var request = require("request");
|
6 |
|
7 | var Gitana = require("gitana");
|
8 |
|
9 | var exports = module.exports;
|
10 |
|
11 | var fns = {};
|
12 |
|
13 | var trigger = function(eventName)
|
14 | {
|
15 | var list = fns[eventName];
|
16 | if (list)
|
17 | {
|
18 | for (var i = 0; i < list.length; i++)
|
19 | {
|
20 | list[i]();
|
21 | }
|
22 | }
|
23 | };
|
24 |
|
25 |
|
26 |
|
27 |
|
28 |
|
29 |
|
30 |
|
31 | var handleRegister = function(req, res)
|
32 | {
|
33 |
|
34 | var form = req.body;
|
35 |
|
36 |
|
37 | var errors = [];
|
38 |
|
39 |
|
40 | if (!form.password)
|
41 | {
|
42 | errors.push({
|
43 | "field": "password",
|
44 | "error": "Field 'password' is missing"
|
45 | });
|
46 | }
|
47 |
|
48 |
|
49 | if (!form.passwordVerify)
|
50 | {
|
51 | errors.push({
|
52 | "field": "passwordVerify",
|
53 | "error": "Field 'passwordVerify' is missing"
|
54 | });
|
55 | }
|
56 |
|
57 |
|
58 | if (form.password != form.passwordVerify)
|
59 | {
|
60 | errors.push({
|
61 | "field": "password",
|
62 | "error": "The passwords do not match."
|
63 | });
|
64 | }
|
65 |
|
66 |
|
67 | if (!form.email)
|
68 | {
|
69 | errors.push({
|
70 | "field": "email",
|
71 | "error": "Field 'email' is missing"
|
72 | });
|
73 | }
|
74 |
|
75 |
|
76 | if (form.email)
|
77 | {
|
78 | var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
|
79 | if (!re.test(form.email))
|
80 | {
|
81 | errors.push({
|
82 | "field": "email",
|
83 | "error": "The provided email is not valid"
|
84 | });
|
85 | }
|
86 | }
|
87 |
|
88 |
|
89 | if (!form.username)
|
90 | {
|
91 | errors.push({
|
92 | "field": "username",
|
93 | "error": "Field 'username' is missing"
|
94 | });
|
95 | }
|
96 |
|
97 |
|
98 | var gitana = req.gitana;
|
99 |
|
100 |
|
101 | Chain(gitana.datastore("principals")).trap(function() {
|
102 |
|
103 |
|
104 | p();
|
105 |
|
106 | }).readPrincipal(form.username).then(function() {
|
107 |
|
108 |
|
109 | errors.push({
|
110 | "field": "username",
|
111 | "error": "A user already exists for this username."
|
112 | });
|
113 |
|
114 | p();
|
115 |
|
116 | });
|
117 |
|
118 | var p = function()
|
119 | {
|
120 | if (errors && errors.length > 0)
|
121 | {
|
122 | res.send(500, {
|
123 | "ok": false,
|
124 | "errors": errors
|
125 | });
|
126 | return;
|
127 | }
|
128 |
|
129 | var errHandler = function(err) {
|
130 |
|
131 | res.send(500, {
|
132 | "ok": false,
|
133 | "message": err.message
|
134 | });
|
135 | };
|
136 |
|
137 | Chain(gitana.datastore("principals")).trap(errHandler).createUser({
|
138 | "name": form.username,
|
139 | "email": form.email,
|
140 | "password": form.password
|
141 | }).then(function() {
|
142 | var user = this;
|
143 |
|
144 |
|
145 | var teamKey = "appusers-" + gitana.application().getId();
|
146 | Chain(gitana.stack()).trap(errHandler).readTeam(teamKey).addMember(user).then(function() {
|
147 |
|
148 | res.send({
|
149 | "ok": true,
|
150 | "user": user
|
151 | });
|
152 |
|
153 | });
|
154 | });
|
155 | };
|
156 | };
|
157 |
|
158 | var handleInvalidate = function(req, res)
|
159 | {
|
160 |
|
161 | trigger("invalidate");
|
162 |
|
163 |
|
164 | process.env.CLOUDCMS_APPSERVER_TIMESTAMP = new Date().getTime();
|
165 |
|
166 |
|
167 | process.IO.sockets.emit("timestamp", {
|
168 | "timestamp": process.env.CLOUDCMS_APPSERVER_TIMESTAMP
|
169 | });
|
170 |
|
171 | console.log("Server timestamp regenerated");
|
172 |
|
173 | res.send({
|
174 | "ok": true,
|
175 | "timestamp": process.env.CLOUDCMS_APPSERVER_TIMESTAMP
|
176 | });
|
177 | };
|
178 |
|
179 | var handleInfo = function(req, res)
|
180 | {
|
181 | res.send({
|
182 | "ok": true,
|
183 | "timestamp": process.env.CLOUDCMS_APPSERVER_TIMESTAMP,
|
184 | "process.env.CLOUDCMS_APPSERVER_MODE": process.env.CLOUDCMS_APPSERVER_MODE
|
185 | });
|
186 | };
|
187 |
|
188 | exports.init = function(app, callback)
|
189 | {
|
190 | |
191 |
|
192 |
|
193 | app.post("/register", function(req, res) {
|
194 | handleRegister(req, res);
|
195 | });
|
196 |
|
197 | |
198 |
|
199 |
|
200 | app.get("/server/invalidate", function(req, res) {
|
201 | handleInvalidate(req, res);
|
202 | });
|
203 |
|
204 | |
205 |
|
206 |
|
207 | app.get("/server/info", function(req, res) {
|
208 | handleInfo(req, res);
|
209 | });
|
210 |
|
211 | callback();
|
212 | };
|
213 |
|
214 | exports.onInvalidate = function(fn)
|
215 | {
|
216 | if (!fns["invalidate"])
|
217 | {
|
218 | fns["invalidate"] = [];
|
219 | }
|
220 |
|
221 | fns["invalidate"].push(fn);
|
222 | };
|