Guest User

Untitled

a guest
Apr 21st, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.39 KB | None | 0 0
  1. require 'rubygems'
  2. require 'sinatra'
  3. require 'warden'
  4.  
  5. Warden::Strategies.add(:password) do
  6. def authenticate!
  7. if params["login"] == "name"
  8. success!("the user")
  9. else
  10. fail!("Can't log you in")
  11. end
  12. end
  13. end
  14.  
  15. Warden::Strategies.add(:nigel) do
  16. def authenticate!
  17. if params["login"] == "nigel"
  18. success!("the user")
  19. else
  20. fail!("You're not nigel")
  21. end
  22. end
  23. end
  24.  
  25. Warden::Manager.before_failure do |env, opts|
  26. env['REQUEST_METHOD'] = "POST"
  27. end
  28.  
  29. class ::MyMiddleware
  30.  
  31. def initialize(app)
  32. @app = app
  33. end
  34.  
  35. def call(env)
  36. request = Rack::Request.new(env)
  37. if request.path == "/custom"
  38. request.env["warden"].authenticate!
  39. Rack::Response.new("You're OK!").finish
  40. else
  41. @app.call(env)
  42. end
  43. end
  44. end
  45.  
  46.  
  47. class MyApp < Sinatra::Application
  48. use Rack::Session::Cookie
  49.  
  50. use Warden::Manager do |manager|
  51. manager.default_strategies :password
  52. manager.failure_app = self
  53. end
  54.  
  55. use MyMiddleware
  56.  
  57. helpers do
  58. def warden
  59. request.env['warden']
  60. end
  61.  
  62. def require_login(*args)
  63. warden.authenticate!(*args)
  64. end
  65. end
  66.  
  67. get "/authd" do
  68. require_login
  69. "Session: #{request.session}"
  70. end
  71.  
  72. get "/public" do
  73. "Public"
  74. end
  75.  
  76. get "/logout" do
  77. warden.logout
  78. redirect "/public"
  79. end
  80.  
  81. post "/unauthenticated" do
  82. out = warden.message
  83. out << " You need to login"
  84. out
  85. end
  86. end
  87.  
  88. MyApp.run!
Add Comment
Please, Sign In to add comment