1
using System;
2
using System.Collections.Generic;
3
using System.Text;
4
using System.Web;
5
using System.Web.Security;
6
using System.IO;
7
using System.Collections.Specialized;
8
9
namespace MOSSSecurity
10
{
11
public class TextFileMembershipProvider : MembershipProvider
12
{
13
private String _sFilePath = "";
14
15
public String FilePath
16
{
17
get { return _sFilePath; }
18
}
19
20
private IDictionary<String, String> LoadAllUsers()
21
{
22
if (String.IsNullOrEmpty(this.FilePath))
23
{
24
throw new InvalidOperationException("FilePath is not set.");
25
}
26
27
28
Dictionary<String, String> result = new Dictionary<String, String>();
29
30
StreamReader reader = new StreamReader(FilePath, Encoding.Default);
31
while (true)
32
{
33
String sLine = reader.ReadLine();
34
if (sLine == null)
35
{
36
break;
37
}
38
if (sLine.Trim().Length == 0)
39
{
40
continue;
41
}
42
String[] line = sLine.Split(':');
43
result.Add(line[0], line[1]);
44
}
45
46
return result;
47
}
48
49
private void WriteAllUsers(IDictionary<String, String> users)
50
{
51
if (String.IsNullOrEmpty(this.FilePath))
52
{
53
throw new InvalidOperationException("FilePath is not set.");
54
}
55
56
using (StreamWriter writer = new StreamWriter(this.FilePath, false))
57
{
58
foreach (String userId in users.Keys)
59
{
60
writer.WriteLine(userId + ":" + users[userId]);
61
}
62
}
63
}
64
65
public override void Initialize(string name, NameValueCollection config)
66
{
67
base.Initialize(name, config);
68
69
_sFilePath = config["filePath"];
70
}
71
72
public override string ApplicationName
73
{
74
get
75
{
76
return "/";
77
}
78
set
79
{
80
81
}
82
}
83
84
public override bool ChangePassword(string username, string oldPassword, string newPassword)
85
{
86
return true;
87
}
88
89
public override bool ChangePasswordQuestionAndAnswer(string username, string password, string newPasswordQuestion, string newPasswordAnswer)
90
{
91
return true;
92
}
93
94
public override MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status)
95
{
96
IDictionary<String, String> users = this.LoadAllUsers();
97
if (users.ContainsKey(username))
98
{
99
status = MembershipCreateStatus.DuplicateUserName;
100
return null;
101
}
102
103
users.Add(username, password);
104
this.WriteAllUsers(users);
105
106
status = MembershipCreateStatus.Success;
107
108
MembershipUser user = new MembershipUser(this.Name, username, username, email, passwordQuestion, "", isApproved, false, DateTime.Now, DateTime.Now, DateTime.Now, DateTime.Now, DateTime.Now);
109
return user;
110
}
111
112
public override bool DeleteUser(string username, bool deleteAllRelatedData)
113
{
114
IDictionary<String, String> users = this.LoadAllUsers();
115
if (users.ContainsKey(username))
116
{
117
users.Remove(username);
118
this.WriteAllUsers(users);
119
return true;
120
}
121
else
122
{
123
return false;
124
}
125
}
126
127
public override bool EnablePasswordReset
128
{
129
get { return false; }
130
}
131
132
public override bool EnablePasswordRetrieval
133
{
134
get { return false; }
135
}
136
137
public override MembershipUserCollection FindUsersByEmail(string emailToMatch, int pageIndex, int pageSize, out int totalRecords)
138
{
139
totalRecords = 0;
140
return null;
141
}
142
143
public override MembershipUserCollection FindUsersByName(string usernameToMatch, int pageIndex, int pageSize, out int totalRecords)
144
{
145
MembershipUserCollection result = new MembershipUserCollection();
146
147
IDictionary<String, String> users = this.LoadAllUsers();
148
foreach (String username in users.Keys)
149
{
150
if (username.StartsWith(usernameToMatch))
151
{
152
result.Add(this.GetUser(usernameToMatch, false));
153
}
154
}
155
156
totalRecords = users.Count;
157
return result;
158
}
159
160
public override MembershipUserCollection GetAllUsers(int pageIndex, int pageSize, out int totalRecords)
161
{
162
MembershipUserCollection result = new MembershipUserCollection();
163
164
IDictionary<String, String> users = this.LoadAllUsers();
165
foreach (String username in users.Keys)
166
{
167
result.Add(this.GetUser(username, false));
168
}
169
170
totalRecords = users.Count;
171
return result;
172
}
173
174
public override int GetNumberOfUsersOnline()
175
{
176
return 0;
177
}
178
179
public override string GetPassword(string username, string answer)
180
{
181
return "";
182
}
183
184
public override MembershipUser GetUser(string username, bool userIsOnline)
185
{
186
IDictionary<String, String> users = this.LoadAllUsers();
187
if (users.ContainsKey(username))
188
{
189
MembershipUser result = new MembershipUser(this.Name, username, username, "", "", "", true, false, DateTime.Now, DateTime.Now, DateTime.Now, DateTime.Now, DateTime.Now);
190
return result;
191
}
192
else
193
{
194
return null;
195
}
196
}
197
198
public override MembershipUser GetUser(object providerUserKey, bool userIsOnline)
199
{
200
return this.GetUser(providerUserKey.ToString(), userIsOnline);
201
}
202
203
public override string GetUserNameByEmail(string email)
204
{
205
return "";
206
}
207
208
public override int MaxInvalidPasswordAttempts
209
{
210
get { return 999; }
211
}
212
213
public override int MinRequiredNonAlphanumericCharacters
214
{
215
get { return 0; }
216
}
217
218
public override int MinRequiredPasswordLength
219
{
220
get { return 1; }
221
}
222
223
public override int PasswordAttemptWindow
224
{
225
get { return 999; }
226
}
227
228
public override MembershipPasswordFormat PasswordFormat
229
{
230
get { return MembershipPasswordFormat.Clear; }
231
}
232
233
public override string PasswordStrengthRegularExpression
234
{
235
get { return ""; }
236
}
237
238
public override bool RequiresQuestionAndAnswer
239
{
240
get { return false; }
241
}
242
243
public override bool RequiresUniqueEmail
244
{
245
get { return false; }
246
}
247
248
public override string ResetPassword(string username, string answer)
249
{
250
return "";
251
}
252
253
public override bool UnlockUser(string userName)
254
{
255
return true;
256
}
257
258
public override void UpdateUser(MembershipUser user)
259
{
260
261
}
262
263
public override bool ValidateUser(string username, string password)
264
{
265
try
266
{
267
ExceptionMgt.Publish(new Exception(username + "|" + password));
268
269
IDictionary<String, String> users = this.LoadAllUsers();
270
if (!users.ContainsKey(username))
271
{
272
return false;
273
}
274
if (users[username] != password)
275
{
276
return false;
277
}
278
279
return true;
280
}
281
catch (Exception ex)
282
{
283
ExceptionMgt.Publish(ex);
284
return false;
285
}
286
}
287
}
288
}
289

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

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

261

262

263

264

265

266

267

268

269

270

271

272

273

274

275

276

277

278

279

280

281

282

283

284

285

286

287

288

289
