Skip to content

Commit 5fa174f

Browse files
committed
Add support for user registration
1 parent 2bc196c commit 5fa174f

5 files changed

Lines changed: 59 additions & 0 deletions

File tree

OpenFlow/src/Config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ export class Config {
1010
public static db:DatabaseConnection = null;
1111
public static auto_create_users:boolean = Config.parseBoolean(Config.getEnv("auto_create_users", "false"));
1212
public static auto_create_domains:string[] = Config.parseArray(Config.getEnv("auto_create_domains", ""));
13+
public static allow_user_registration:boolean = Config.parseBoolean(Config.getEnv("allow_user_registration", "false"));
1314

1415
public static api_bypass_perm_check:boolean = Config.parseBoolean(Config.getEnv("api_bypass_perm_check", "false"));
1516
public static websocket_package_size:number = parseInt(Config.getEnv("websocket_package_size", "1024"), 10);

OpenFlow/src/Messages/Message.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import { MapReduceMessage } from "./MapReduceMessage";
2020
import { CloseQueueMessage } from "./CloseQueueMessage";
2121
import { RegisterQueueMessage } from "./RegisterQueueMessage";
2222
import { QueueMessage } from "./QueueMessage";
23+
import { RegisterUserMessage } from "./RegisterUserMessage";
2324

2425
export class Message {
2526
public id: string;
@@ -95,6 +96,9 @@ export class Message {
9596
case "signin":
9697
this.Signin(cli);
9798
break;
99+
case "registeruser":
100+
this.RegisterUser(cli);
101+
break;
98102
case "mapreduce":
99103
this.MapReduce(cli);
100104
break;
@@ -407,6 +411,22 @@ export class Message {
407411
}
408412
this.Send(cli);
409413
}
414+
private async RegisterUser(cli: WebSocketClient): Promise<void> {
415+
this.Reply();
416+
var msg: RegisterUserMessage;
417+
var user:User;
418+
try {
419+
msg = RegisterUserMessage.assign(this.data);
420+
user = await User.FindByUsername(msg.username);
421+
if(user!==null && user !== undefined) { throw new Error("Illegal username"); }
422+
user = await User.ensureUser(msg.name, msg.username, msg.password, null);
423+
msg.user = new TokenUser(user);
424+
} catch (error) {
425+
this.data = "";
426+
msg.error = error.toString();
427+
}
428+
this.Send(cli);
429+
}
410430
}
411431

412432
export class JSONfn {
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { Base } from "../base";
2+
import { TokenUser } from "../TokenUser";
3+
4+
export class RegisterUserMessage implements IReplyMessage {
5+
public error: string;
6+
public jwt:any;
7+
8+
public user:TokenUser;
9+
public name:string;
10+
public username:string;
11+
public password:string;
12+
static assign(o:any):RegisterUserMessage {
13+
if (typeof o === "string" || o instanceof String) {
14+
return Object.assign(new RegisterUserMessage(), JSON.parse(o.toString()));
15+
}
16+
return Object.assign(new RegisterUserMessage(), o);
17+
}
18+
}

OpenFlow/src/User.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,5 +112,18 @@ export class User extends Base {
112112
});
113113
}
114114
}
115+
116+
public static async ensureUser(name:string, username:string, password:string, id:string):Promise<User> {
117+
var user:User = await User.FindByUsernameOrId(username, id);
118+
if(user!==null && (user._id === id || id === null)) { return user; }
119+
if(user!==null && id !== null ) { await Config.db.DeleteOne(user._id, "users", TokenUser.rootToken()); }
120+
user = new User(); user._id = id; user.name = name; user.username = username;
121+
if(password===null || password===undefined || password === "") { password = Math.random().toString(36).substr(2, 9); }
122+
await user.SetPassword(password);
123+
user = await Config.db.InsertOne(user, "users", TokenUser.rootToken());
124+
user = User.assign(user);
125+
return user;
126+
}
127+
115128
}
116129

OpenFlow/src/public/Controllers.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -442,6 +442,13 @@ module openflow {
442442
this.loadData();
443443
});
444444
}
445+
async DeleteOne(model: any):Promise<any> {
446+
this.loading = true;
447+
await this.api.Delete(this.collection, model);
448+
this.models = this.models.filter(function (m: any):boolean { return m._id!==model._id;});
449+
this.loading = false;
450+
if (!this.$scope.$$phase) { this.$scope.$apply(); }
451+
}
445452
async DeleteMany():Promise<void> {
446453
this.loading = true;
447454
var Promises:Promise<DeleteOneMessage>[] = [];

0 commit comments

Comments
 (0)