1 /**
2 	Basic definitions
3 
4 	Copyright: © 2012 RejectedSoftware e.K.
5 	License: Subject to the terms of the General Public License version 3, as written in the included LICENSE.txt file.
6 	Authors: Sönke Ludwig
7 */
8 module userman.userman;
9 
10 public import vibe.mail.smtp;
11 public import vibe.inet.url;
12 
13 static import vibe.utils.validation;
14 
15 import std.range : isOutputRange;
16 
17 /**
18 	See_Also: vibe.utils.validation.validateUserName()
19  */
20 class UserNameSettings {
21 	int minLength = 3;
22 	int maxLength = 32;
23 	string additionalChars = "-_";
24 	bool noNumberStart = false; // it's always a good idea to keep this option *disabled*
25 }
26 
27 package bool validateUserName(R)(UserNameSettings settings, ref R error_sink, string userName)
28 	if (isOutputRange!(R, char))
29 {
30 	if (!settings) {
31 		static UserNameSettings default_settings;
32 		if (!default_settings) default_settings = new UserNameSettings;
33 		settings = default_settings;
34 	}
35 
36 	return vibe.utils.validation.validateUserName(error_sink, userName,
37             settings.minLength,
38             settings.maxLength,
39             settings.additionalChars,
40             settings.noNumberStart);
41 }
42 
43 /**
44 	Settings also used by the API
45  */
46 class UserManCommonSettings {
47 	UserNameSettings userNameSettings;
48 	bool useUserNames = true; // use a user name or the email address for identification?
49 	bool requireActivation;
50 	string serviceName = "User database test";
51 	URL serviceURL = "http://www.example.com/";
52 	string serviceEmail = "userdb@example.com";
53 }
54 
55 deprecated("Consistency: Use .requireActivation instead.")
56 @property ref inout(bool) requireAccountValidation(inout UserManCommonSettings settings)
57 {
58 	return settings.requireActivation;
59 }
60 
61 deprecated("Consistency: Use .serviceURL instead.")
62 @property ref inout(URL) serviceUrl(inout UserManCommonSettings settings)
63 {
64 	return settings.serviceURL;
65 }
66 
67 class UserManSettings : UserManCommonSettings {
68 	string databaseURL = "mongodb://127.0.0.1:27017/test";//*/"redis://127.0.0.1:6379/1";
69 	SMTPClientSettings mailSettings;
70 
71 	this()
72 	{
73 		mailSettings = new SMTPClientSettings;
74 	}
75 }