Skip to content
Extraits de code Groupes Projets
token_endpoint.rb 1,13 ko
Newer Older
module OpenidConnect
  class TokenEndpoint
    attr_accessor :app
    delegate :call, to: :app

    def initialize
      @app = Rack::OAuth2::Server::Token.new do |req, res|
Augier's avatar
Augier a validé
        o_auth_app = retrieve_client(req)
        if app_valid?(o_auth_app, req)
          handle_flows(req, res)
theworldbright's avatar
theworldbright a validé
        else
          req.invalid_client!
Augier's avatar
Augier a validé
    def handle_flows(req, res)
theworldbright's avatar
theworldbright a validé
      case req.grant_type
Augier's avatar
Augier a validé
      when :password
        handle_password_flow(req, res)
      else
        req.unsupported_grant_type!
Augier's avatar
Augier a validé
    def handle_password_flow(req, res)
theworldbright's avatar
theworldbright a validé
      user = User.find_for_database_authentication(username: req.username)
      if user
        if user.valid_password?(req.password)
          res.access_token = user.tokens.create!.bearer_token
        else
          req.invalid_grant!
        end
      else
        req.invalid_grant! # TODO: Change to user login: Perhaps redirect_to login_path?
      end
Augier's avatar
Augier a validé
    def retrieve_client(req)
theworldbright's avatar
theworldbright a validé
      OAuthApplication.find_by_client_id req.client_id
Augier's avatar
Augier a validé
    def app_valid?(o_auth_app, req)
theworldbright's avatar
theworldbright a validé
      o_auth_app.client_secret == req.client_secret