| Class | UserService |
| In: |
vendor/plugins/services/lib/user_service.rb
|
| Parent: | BaseService |
Adds a user to a group. Level may be :administrator, :moderator, or :user.
# 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).
# 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
# 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.
# 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!
# 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.
# 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.
# 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.
# 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.
# 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.
# 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.
# 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.
# 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
# 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.
# 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.
# 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.
# 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.
# 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
# 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.
# 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.
# 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
# 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.
# 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