summaryrefslogtreecommitdiff
path: root/app/models/session.rb
diff options
context:
space:
mode:
authornfoy <nfoy@purdue.edu>2014-04-03 16:15:46 -0400
committernfoy <nfoy@purdue.edu>2014-04-03 16:15:46 -0400
commit5169363d6698fb87372efcb7ace552b89953584e (patch)
treeff42d819be510dfe929b4cd9dbc1cd25f51c9785 /app/models/session.rb
parent2b79a033262dfe610eb22b7f6b3614db9cb134b1 (diff)
parent9f19d0e16d7920e07255c0fbe596c518d1aa415f (diff)
Merge branch 'master' of https://github.com/LukeShu/leaguer
Diffstat (limited to 'app/models/session.rb')
-rw-r--r--app/models/session.rb41
1 files changed, 40 insertions, 1 deletions
diff --git a/app/models/session.rb b/app/models/session.rb
index c66afec..f5e642b 100644
--- a/app/models/session.rb
+++ b/app/models/session.rb
@@ -1,3 +1,42 @@
class Session < ActiveRecord::Base
- belongs_to :user
+ belongs_to :user
+
+ ##
+ # Create a random remember token for the user. This will be
+ # changed every time the user creates a new session.
+ #
+ # If you want this value, hang on to it; the raw value is
+ # discarded afterward.
+ #
+ # By changing the cookie every new session, any hijacked sessions
+ # (where the attacker steals a cookie to sign in as a certain
+ # user) will expire the next time the user signs back in.
+ #
+ # The random string is of length 16 composed of A-Z, a-z, 0-9
+ # This is the browser's cookie value.
+ def create_token()
+ t = SecureRandom.urlsafe_base64
+ self.token = Session.hash_token(t)
+ t
+ end
+
+ ##
+ # Encrypt the remember token.
+ # This is the encrypted version of the cookie stored on
+ # the database.
+ #
+ # The reasoning for storing a hashed token is so that even if
+ # the database is compromised, the attacker won't be able to use
+ # the remember tokens to sign in.
+ def Session.hash_token(token)
+ # SHA-1 (Secure Hash Algorithm) is a US engineered hash
+ # function that produces a 20 byte hash value which typically
+ # forms a hexadecimal number 40 digits long.
+ # The reason I am not using the Bcrypt algorithm is because
+ # SHA-1 is much faster and I will be calling this on
+ # every page a user accesses.
+ #
+ # https://en.wikipedia.org/wiki/SHA-1
+ Digest::SHA1.hexdigest(token.to_s)
+ end
end