FEATURE: custom fields on User

This commit is contained in:
Sam
2014-04-22 13:52:13 +10:00
parent 25860622b7
commit a3b2b4baca
9 changed files with 139 additions and 15 deletions

View File

@ -1,5 +1,7 @@
class SingleSignOn
ACCESSORS = [:nonce, :name, :username, :email, :about_me, :external_email, :external_username, :external_name, :external_id]
ACCESSORS = [:nonce, :name, :username, :email,
:about_me, :external_email, :external_username,
:external_name, :external_id]
FIXNUMS = []
NONCE_EXPIRY_TIME = 10.minutes
@ -14,14 +16,6 @@ class SingleSignOn
raise RuntimeError, "sso_url not implemented on class, be sure to set it on instance"
end
def sso_secret
@sso_secret || self.class.sso_secret
end
def sso_url
@sso_url || self.class.sso_url
end
def self.parse(payload, sso_secret = nil)
sso = new
sso.sso_secret = sso_secret if sso_secret
@ -39,9 +33,33 @@ class SingleSignOn
val = val.to_i if FIXNUMS.include? k
sso.send("#{k}=", val)
end
decoded_hash.each do |k,v|
# 1234567
# custom.
#
if k[0..6] == "custom."
field = k[7..-1]
sso.custom_fields[field] = v
end
end
sso
end
def sso_secret
@sso_secret || self.class.sso_secret
end
def sso_url
@sso_url || self.class.sso_url
end
def custom_fields
@custom_fields ||= {}
end
def sign(payload)
OpenSSL::HMAC.hexdigest("sha256", sso_secret, payload)
end
@ -65,6 +83,12 @@ class SingleSignOn
payload[k] = val
end
if @custom_fields
@custom_fields.each do |k,v|
payload["custom.#{k}"] = v.to_s
end
end
Rack::Utils.build_query(payload)
end