Class UserService
In: vendor/plugins/services/lib/user_service.rb
Parent: BaseService

Methods

Public Class methods

Adds a user to a group. Level may be :administrator, :moderator, or :user.

[Source]

     # File vendor/plugins/services/lib/user_service.rb, line 220
220:         def self.addUserToGroup(groupID, userID, level)
221:                 if self.doesGroupMemberExist?(groupID, userID) == false
222:                         # only add if the user doesn't already exist

223:                         groupmember = GroupMember.new
224:                         groupmember.groupid = groupID
225:                         groupmember.userid = userID
226:                         case level
227:                                 when :administrator, "administrator"
228:                                         groupmember.level = "administrator"
229:                                 when :moderator, "moderator"
230:                                         groupmember.level = "moderator"
231:                                 when :user, "user"
232:                                         groupmember.level = "user"
233:                                 else
234:                                         raise ArgumentError, "Valid group level not specified", caller
235:                         end
236:                         groupmember.isbanned = false
237:                         groupmember.save!
238:                 end
239:         end

Returns an authentication code, does NOT create a session. AuthCodes can be used to perform actions on behalf of this user (i.e. from remote sites).

[Source]

     # File vendor/plugins/services/lib/user_service.rb, line 104
104:         def self.authenticate(userName, password, ipAddress)
105:                 if self.doesUserExist?(userName)
106:                         user = User.find(:first, :conditions => ["username = ?", userName.downcase])
107:                         if defined?(PASSWORD_SALT)
108:                                 if user.password == "sha512:" + Digest::SHA512::hexdigest(PASSWORD_SALT + ":" + password)
109:                                         # create an authcode.

110:                                         authcode = createAuthCode(userName, user.password, ipAddress)
111:                                         # set the authcode

112:                                         user.authcode = authcode
113:                                         user.save!
114:                                         return { :authcode => authcode, :uuid => user.uuid }
115:                                 else
116:                                         return nil
117:                                 end
118:                         else
119:                                 if user.password == "sha512:" + Digest::SHA512::hexdigest(password)
120:                                         # create an authcode.

121:                                         authcode = createAuthCode(userName, user.password, ipAddress)
122:                                         # set the authcode

123:                                         user.authcode = authcode
124:                                         user.save!
125:                                         return { :authcode => authcode, :uuid => user.uuid }
126:                                 else
127:                                         return nil
128:                                 end
129:                         end
130:                 else
131:                         # User doesn't exist.

132:                         return nil
133:                 end
134:         end

Sets a particular user in a group as banned

[Source]

     # File vendor/plugins/services/lib/user_service.rb, line 250
250:         def self.banGroupMember(groupID, userID)
251:                 groupmember = GroupMember.find(:first, :conditions => ["groupid = ? AND userid = ?", groupID, userID])
252:                 if groupmember != nil
253:                         groupmember.isbanned = true
254:                         groupmember.save!
255:                 end
256:         end

Changes a user’s level within a group. See addUserToGroup for a list of valid levels.

[Source]

     # File vendor/plugins/services/lib/user_service.rb, line 269
269:         def self.changeGroupMemberLevel(groupID, userID, newLevel)
270:                 if self.doesGroupMemberExist?(groupID, userID)
271:                         groupmember = GroupMember.find(:first, :conditions => ["groupid = ? AND userid = ?", groupID, userID])
272:                         case newLevel
273:                                 when :administrator, "administrator"
274:                                         groupmember.level = "administrator"
275:                                 when :moderator, "moderator"
276:                                         groupmember.level = "moderator"
277:                                 when :user, "user"
278:                                         groupmember.level = "user"
279:                                 else
280:                                         raise ArgumentError, "Valid group level not specified", caller
281:                         end
282:                         groupmember.save!
283:                 end
284:         end

Takes a permissions array (see developer.macrodeck.com/wiki/Services:UserService) and returns true if the user specified is allowed. This function returns false if the user is denied. The default is to deny — that means that if you don’t explicitly allow everyone in an permission array, nobody can see it!

[Source]

     # File vendor/plugins/services/lib/user_service.rb, line 371
371:         def self.checkPermissions(perms, uuid)
372:                 perms.each do |perm|
373:                         if perm[:id] != nil
374:                                 if perm[:id].downcase == uuid.downcase
375:                                         if perm[:action] == :allow
376:                                                 return true
377:                                         elsif perm[:action] == :deny
378:                                                 return false
379:                                         end
380:                                 elsif self.isGroup?(perm[:id])
381:                                         # if the permission is a group

382:                                         if self.doesGroupMemberExist?(perm[:id], uuid)
383:                                                 if perm[:action] == :allow
384:                                                         return true
385:                                                 elsif perm[:action] == :deny
386:                                                         return false
387:                                                 end
388:                                         end
389:                                 elsif perm[:id].downcase == "everybody"
390:                                         if perm[:action] == :allow
391:                                                 return true
392:                                         elsif perm[:action] == :deny
393:                                                 return false
394:                                         end
395:                                 end
396:                         else
397:                                 # perm[:id] is nil therefore something is wrong.

398:                                 # deny them.

399:                                 return false
400:                         end
401:                 end
402:                 # if the user hasn't matched a rule yet, they

403:                 # will be denied for security!

404:                 return false
405:         end

Creates an authentication code based on information that can be retrieved in the function and a username and password hash that are specified.

[Source]

     # File vendor/plugins/services/lib/user_service.rb, line 289
289:         def self.createAuthCode(userName, passHash, ipAddress)
290:                 ipaddr_arr = ipAddress.split(".")
291:                 return Digest::SHA512::hexdigest(userName + ":" + passHash + ":" + ipaddr_arr[0].to_s + ":" + ipaddr_arr[1].to_s + ":" + ipaddr_arr[2].to_s + ":" + Time.now.mon.to_s)
292:         end

Creates a group with the information specified.

[Source]

     # File vendor/plugins/services/lib/user_service.rb, line 207
207:         def self.createGroup(groupName, displayname)
208:                 if self.doesGroupExist?(groupName) == false
209:                         # Can create the group since it doesn't exist.

210:                         group = Group.new
211:                         group.uuid = UUIDService.generateUUID
212:                         group.name = groupName.downcase
213:                         group.displayname = displayname
214:                         group.save!
215:                 end
216:         end

Creates a new user in the database, first checking to see if the user exists or not. Returns the new user’s UUID.

[Source]

    # File vendor/plugins/services/lib/user_service.rb, line 22
22:         def self.createUser(userName, password, secretQuestion, secretAnswer, name, displayName, email)
23:                 if self.doesUserExist?(userName) == false
24:                         user = User.new
25:                         user.uuid = UUIDService.generateUUID
26:                         user.username = userName.downcase
27:                         if defined?(PASSWORD_SALT)
28:                                 user.password = "sha512:" + Digest::SHA512::hexdigest(PASSWORD_SALT + ":" + password)
29:                         else
30:                                 user.password = "sha512:" + Digest::SHA512::hexdigest(password)
31:                         end
32:                         # removed 10-July-2006 by Ziggy #user.passwordhint = passHint

33:                         user.secretquestion = secretQuestion
34:                         user.secretanswer = secretAnswer
35:                         user.name = name
36:                         user.displayname = displayName
37:                         user.creation = Time.now.to_i
38:                         # removed 10-July-2006 by Ziggy #user.dob = dob

39:                         user.email = email
40:                         user.verified_email = false
41:                         user.save!
42:                         return user.uuid
43:                 else
44:                         return nil
45:                 end
46:         end

Returns true if a group exists, false if one does not.

[Source]

    # File vendor/plugins/services/lib/user_service.rb, line 92
92:         def self.doesGroupExist?(groupName)
93:                 group = Group.find(:first, :conditions => ["name = ?", groupName.downcase])
94:                 if group == nil
95:                         return false
96:                 else
97:                         return true
98:                 end
99:         end

Returns true if a group member exists, false if one does not.

[Source]

    # File vendor/plugins/services/lib/user_service.rb, line 81
81:         def self.doesGroupMemberExist?(groupID, userID)
82:                 groupmember = GroupMember.find(:first, :conditions => ["groupid = ? AND userid = ?", groupID, userID])
83:                 if groupmember == nil
84:                         return false
85:                 else
86:                         return true
87:                 end
88:         end

Returns true if the user specified exists, returns false if the user specified does not exist.

[Source]

    # File vendor/plugins/services/lib/user_service.rb, line 50
50:         def self.doesUserExist?(userName)
51:                 user = User.find(:first, :conditions => ["username = ?", userName.downcase])
52:                 if user == nil
53:                         return false
54:                 else
55:                         return true
56:                 end
57:         end

Returns an array (that contains hashes) of the users that are members of a group. The hashes returned are in the following format:

 { :uuid => "User's UUID", :level => :administrator, :isbanned => true }

Keeping in mind that :level may be any possible in addUserToGroup. And :isbanned can be false.

[Source]

     # File vendor/plugins/services/lib/user_service.rb, line 302
302:         def self.getGroupMembers(groupID)
303:                 groupmembers = GroupMember.find(:all, :conditions => ["groupid = ?", groupID])
304:                 members = Array.new
305:                 groupmembers.each do |member|
306:                         case member.level
307:                                 when "administrator"
308:                                         h = { :uuid => member.userid, :level => :administrator, :isbanned => member.isbanned }
309:                                 when "moderator"
310:                                         h = { :uuid => member.userid, :level => :moderator, :isbanned => member.isbanned }
311:                                 when "user"
312:                                         h = { :uuid => member.userid, :level => :user, :isbanned => member.isbanned }
313:                         end
314:                         members << h
315:                 end
316:                 return members
317:         end

Gets the requested user property of the user specified. Users are specified by UUID and authCode. Valid properties: :username, :secretquestion, :secretanswer :name, :displayname, :creation, and :verified_email

[Source]

     # File vendor/plugins/services/lib/user_service.rb, line 140
140:         def self.getUserProperty(uuid, authCode, property)
141:                 user = User.find(:first, :conditions => ["uuid = ? AND authcode = ?", uuid, authCode])
142:                 if user != nil
143:                         # get the property requested.

144:                         case property
145:                                 when :username, "username"
146:                                         return user.username
147:                                 when :secretquestion, "secretquestion"
148:                                         return user.secretquestion
149:                                 when :secretanswer, "secretanswer"
150:                                         return user.secretanswer
151:                                 when :name, "name"
152:                                         return user.name
153:                                 when :displayname, "displayname"
154:                                         return user.displayname
155:                                 when :creation, "creation"
156:                                         return user.creation
157:                                 when :verified_email, "verified_email"
158:                                         return user.verified_email
159:                                 when :email, "email"
160:                                         return user.email
161:                                 else
162:                                         return nil
163:                         end
164:                 else
165:                         # invalid information

166:                         return nil
167:                 end
168:         end

Returns true if the UUID matches a group.

[Source]

    # File vendor/plugins/services/lib/user_service.rb, line 70
70:         def self.isGroup?(uuid)
71:                 group = Group.find(:first, :conditions => ["uuid = ?", uuid])
72:                 if group != nil
73:                         return true
74:                 else
75:                         return false
76:                 end
77:         end

Returns true if the UUID matches a user.

[Source]

    # File vendor/plugins/services/lib/user_service.rb, line 60
60:         def self.isUser?(uuid)
61:                 user = User.find(:first, :conditions => ["uuid = ?", uuid])
62:                 if user != nil
63:                         return true
64:                 else
65:                         return false
66:                 end
67:         end

Returns the UUID of the group name specified.

[Source]

     # File vendor/plugins/services/lib/user_service.rb, line 320
320:         def self.lookupGroupName(groupName)
321:                 group = Group.find(:first, :conditions => ["name = ?", groupName.downcase])
322:                 if group != nil
323:                         return group.uuid
324:                 else
325:                         return nil
326:                 end
327:         end

Returns a user/group’s display name or nil if the user/group doesn’t exist.

[Source]

     # File vendor/plugins/services/lib/user_service.rb, line 341
341:         def self.lookupUUID(uuid)
342:                 user = User.find(:first, :conditions => ["uuid = ?", uuid])
343:                 if user != nil
344:                         return user.displayname
345:                 else
346:                         # lookup group name

347:                         group = Group.find(:first, :conditions => ["uuid = ?", uuid])
348:                         if group != nil
349:                                 return group.displayname
350:                         else
351:                                 return nil
352:                         end
353:                 end
354:         end

Returns the UUID of the user name specified

[Source]

     # File vendor/plugins/services/lib/user_service.rb, line 330
330:         def self.lookupUserName(userName)
331:                 user = User.find(:first, :conditions => ["username = ?", userName.downcase])
332:                 if user != nil
333:                         return user.uuid
334:                 else
335:                         return nil
336:                 end
337:         end

Removes a user from a group.

[Source]

     # File vendor/plugins/services/lib/user_service.rb, line 242
242:         def self.removeUserFromGroup(groupID, userID)
243:                 groupmember = GroupMember.find(:first, :conditions => ["groupid = ? AND userid = ?", groupID, userID])
244:                 if groupmember != nil
245:                         groupmember.destroy
246:                 end
247:         end

Sets the requested user property of the user specified. Users are specified by UUID and authCode. Valid properties: :secretquestion, :secretanswer, :name, :displayname, :password, and :email. :password will automatically be encrypted.

[Source]

     # File vendor/plugins/services/lib/user_service.rb, line 174
174:         def self.setUserProperty(uuid, authCode, property, value)
175:                 user = User.find(:first, :conditions => ["uuid = ? AND authcode = ?", uuid, authCode])
176:                 if user != nil
177:                         # get the property requested.

178:                         case property
179:                                 when :secretquestion, "secretquestion"
180:                                         user.secretquestion = value
181:                                 when :secretanswer, "secretanswer"
182:                                         user.secretanswer = value
183:                                 when :name, "name"
184:                                         user.name = value
185:                                 when :displayname, "displayname"
186:                                         user.displayname = value
187:                                 when :email, "email"
188:                                         user.email = value
189:                                 when :password, "password"
190:                                         if defined?(PASSWORD_SALT)
191:                                                 user.password = "sha512:" + Digest::SHA512::hexdigest(PASSWORD_SALT + ":" + value)
192:                                         else
193:                                                 user.password = "sha512:" + Digest::SHA512::hexdigest(value)
194:                                         end
195:                                 else
196:                                         return false
197:                         end
198:                         user.save!
199:                         return true
200:                 else
201:                         # invalid information

202:                         return false
203:                 end
204:         end

Unsets a particular user in a group as banned

[Source]

     # File vendor/plugins/services/lib/user_service.rb, line 259
259:         def self.unbanGroupMember(groupID, userID)
260:                 groupmember = GroupMember.find(:first, :conditions => ["groupid = ? AND userid = ?", groupID, userID])
261:                 if groupmember != nil
262:                         groupmember.isbanned = false
263:                         groupmember.save!
264:                 end
265:         end

Validates an authcode specified with one in the database. If it matches, it returns true. Otherwise, it returns false.

[Source]

     # File vendor/plugins/services/lib/user_service.rb, line 358
358:         def self.verifyAuthCode(uuid, authCode)
359:                 user = User.find(:first, :conditions => ["uuid = ? AND authcode = ?", uuid, authCode])
360:                 if user != nil
361:                         return true
362:                 else
363:                         return false
364:                 end
365:         end

[Validate]