Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 46 additions & 12 deletions dream-big-api/app/controllers/authentication_controller.rb
Original file line number Diff line number Diff line change
@@ -1,15 +1,49 @@
class AuthenticationController < ApplicationController
skip_before_action :authenticate_request

# POST /auth/login
def login
@user = User.find_by_email(params[:email])
if @user&.authenticate(params[:password])
token = jwt_encode(user_id: @user.id)
render json: { token: token }, status: :ok
module LoginLibrary
class Authentication
def self.login(email, password)
user = User.find_by_email(email)
if user&.authenticate(password)
token = jwt_encode(user_id: user.id)
{ token: token }
else
render json: { error: 'unauthorized' }, status: :unauthorized
{ error: 'unauthorized' }
end
end

def self.sso_login(sso_token)
user_info = SSO.verify(sso_token)
user = User.find_by_email(user_info[:email])
unless user
user = User.create(email: user_info[:email], username: user_info[:username])
end

token = jwt_encode(user_id: user.id)
{ token: token }
end
end
end


class AuthenticationController < ApplicationController
skip_before_action :authenticate_request

# POST /auth/login
def login
result = LoginLibrary::Authentication.login(params[:email], params[:password])
if result[:token]
render json: { token: result[:token] }, status: :ok
else
render json: { error: result[:error] }, status: :unauthorized
end
end

# POST /auth/sso_login
def sso_login
result = LoginLibrary::Authentication.sso_login(params[:sso_token])
if result[:token]
render json: { token: result[:token] }, status: :ok
else
render json: { error: result[:error] }, status: :unauthorized
end

end
end
end
108 changes: 59 additions & 49 deletions dream-big-api/app/controllers/users_controller.rb
Original file line number Diff line number Diff line change
@@ -1,56 +1,66 @@
require 'login_library'

class UsersController < ApplicationController
skip_before_action :authenticate_request, only: [:create]
before_action :set_user, only: [:show, :destroy]

# GET /users
def index
@users = User.all
render json: @users, status: :ok
end

# GET /users/{username}
def show
render json: @user, status: :ok
end

# POST /users
def create
@user = User.new(user_params)
if @user.save
render json: @user, status: :created
else
render json: { errors: @user.errors.full_messages },
status: :unprocessable_entity
end
end

# PUT /users/{username}
def update
unless @user.update(user_params)
render json: { errors: @user.errors.full_messages },
status: :unprocessable_entity
end
end
before_action :set_user, only: [:show, :destroy]
before_action :authenticate_sso_request, except: [:create]

def find_user
@user = User.find_by_username!(params[:_username])
rescue ActiveRecord::RecordNotFound
render json: { errors: 'User not found' }, status: :not_found
end
# DELETE /users/{username}
def destroy
@user.destroy
# GET /users
def index
@users = User.all
render json: @users, status: :ok
end

# GET /users/{username}
def show
render json: @user, status: :ok
end

# POST /users
def create
@user = User.new(user_params)
if @user.save
render json: @user, status: :created
else
render json: { errors: @user.errors.full_messages },
status: :unprocessable_entity
end

private
def user_params
params.permit(:username, :email, :password)
end

def set_user
@user = User.find(params[:id])
end

# PUT /users/{username}
def update
unless @user.update(user_params)
render json: { errors: @user.errors.full_messages },
status: :unprocessable_entity
end
end

def find_user
@user = User.find_by_username!(params[:_username])
rescue ActiveRecord::RecordNotFound
render json: { errors: 'User not found' }, status: :not_found
end

# DELETE /users/{username}
def destroy
@user.destroy
end

private

def user_params
params.permit(:username, :email, :password)
end

end
def set_user
@user = User.find(params[:id])
end

def authenticate_sso_request
token = request.headers['Authorization']
result = LoginLibrary::Authentication.login_with_sso(token)

if result[:error]
render json: { error: 'unauthorized' }, status: :unauthorized
end
end
end
Loading