lib/tynn/session.rb in tynn-1.0.0.rc1 vs lib/tynn/session.rb in tynn-1.0.0.rc2

- old
+ new

@@ -1,85 +1,87 @@ -# Adds simple cookie based session management. If a secret token is -# given, it signs the cookie data to ensure that it cannot be altered -# by unauthorized means. -# -# ``` -# require "tynn" -# require "tynn/session" -# -# Tynn.helpers(Tynn::Session, secret: "__change_me__") -# -# Tynn.define do -# root do -# res.write(sprintf("hei %s", session[:username])) -# end -# -# on(:username) do |username| -# session[:username] = username -# end -# end -# ``` -# -# The following command generates a cryptographically secure secret ready -# to use: -# -# ``` -# $ ruby -r securerandom -e "puts SecureRandom.hex(64)" -# ``` -# -# It's important to keep the token secret. Knowing the token allows an -# attacker to tamper the data. So, it's recommended to load the token -# from the environment. -# -# ``` -# Tynn.helpers(Tynn::Session, secret: ENV["SESSION_SECRET"]) -# ``` -# -# Under the hood, Tynn::Session uses the [Rack::Session::Cookie][rack-session] -# middleware. Thus, supports all the options available for this middleware. -# -# * `:key` - the name of the cookie. Defaults to `"rack.session"`. -# * `:expire_after` - sets the lifespan of the cookie. If `nil`, -# the cookie will be deleted after the user close the browser. -# Defaults to `nil`. -# * `:httponly` - if `true`, sets the [HttpOnly][cookie-httponly] attribute. -# This mitigates the risk of client side scripting accessing the cookie. -# Defaults to `true`. -# * `:secure` - if `true`, sets the [Secure][cookie-secure] attribute. -# This tells the browser to only transmit the cookie over HTTPS. Defaults -# to `false`. -# -# ``` -# Tynn.helpers( -# Tynn::Session, -# key: "app", -# secret: ENV["SESSION_SECRET"], -# expire_after: 36_000, # seconds -# httponly: true, -# secure: true -# ) -# ``` -# -# [cookie-httponly]: https://www.owasp.org/index.php/Session_Management_Cheat_Sheet#HttpOnly_Attribute -# [cookie-secure]: https://www.owasp.org/index.php/Session_Management_Cheat_Sheet#Secure_Attribute -# [rack-session]: http://www.rubydoc.info/gems/rack/Rack/Session/Cookie -# -module Tynn::Session - RACK_SESSION = "rack.session".freeze # :nodoc: - - def self.setup(app, options = {}) # :nodoc: - app.use(Rack::Session::Cookie, options) - end - - # Returns the session hash. +class Tynn + # Adds simple cookie based session management. If a secret token is + # given, it signs the cookie data to ensure that it cannot be altered + # by unauthorized means. # # ``` - # session # => {} + # require "tynn" + # require "tynn/session" # - # session[:foo] = "foo" - # session[:foo] # => "foo" + # Tynn.helpers(Tynn::Session, secret: "__change_me__") + # + # Tynn.define do + # root do + # res.write(sprintf("hei %s", session[:username])) + # end + # + # on(:username) do |username| + # session[:username] = username + # end + # end # ``` # - def session - return env[RACK_SESSION] + # The following command generates a cryptographically secure secret ready + # to use: + # + # ``` + # $ ruby -r securerandom -e "puts SecureRandom.hex(64)" + # ``` + # + # It's important to keep the token secret. Knowing the token allows an + # attacker to tamper the data. So, it's recommended to load the token + # from the environment. + # + # ``` + # Tynn.helpers(Tynn::Session, secret: ENV["SESSION_SECRET"]) + # ``` + # + # Under the hood, Tynn::Session uses the [Rack::Session::Cookie][rack-session] + # middleware. Thus, supports all the options available for this middleware. + # + # * `:key` - the name of the cookie. Defaults to `"rack.session"`. + # * `:expire_after` - sets the lifespan of the cookie. If `nil`, + # the cookie will be deleted after the user close the browser. + # Defaults to `nil`. + # * `:httponly` - if `true`, sets the [HttpOnly][cookie-httponly] attribute. + # This mitigates the risk of client side scripting accessing the cookie. + # Defaults to `true`. + # * `:secure` - if `true`, sets the [Secure][cookie-secure] attribute. + # This tells the browser to only transmit the cookie over HTTPS. Defaults + # to `false`. + # + # ``` + # Tynn.helpers( + # Tynn::Session, + # key: "app", + # secret: ENV["SESSION_SECRET"], + # expire_after: 36_000, # seconds + # httponly: true, + # secure: true + # ) + # ``` + # + # [cookie-httponly]: https://www.owasp.org/index.php/Session_Management_Cheat_Sheet#HttpOnly_Attribute + # [cookie-secure]: https://www.owasp.org/index.php/Session_Management_Cheat_Sheet#Secure_Attribute + # [rack-session]: http://www.rubydoc.info/gems/rack/Rack/Session/Cookie + # + module Session + RACK_SESSION = "rack.session".freeze # :nodoc: + + def self.setup(app, options = {}) # :nodoc: + app.use(Rack::Session::Cookie, options) + end + + # Returns the session hash. + # + # ``` + # session # => {} + # + # session[:foo] = "foo" + # session[:foo] # => "foo" + # ``` + # + def session + return env[RACK_SESSION] + end end end