From a97531e77e9e3f0e391b2504fcb278cabc2b901e Mon Sep 17 00:00:00 2001 From: realtradam Date: Thu, 2 May 2024 20:54:36 -0400 Subject: finish inital auth --- app/controllers/api/v1/auth_controller.rb | 65 ++++++++++++++-------- app/controllers/api/v1/users_controller.rb | 16 ++++++ app/helpers/api/v1/users_helper.rb | 2 + app/javascript/components/Layout.jsx | 6 +- app/javascript/routes/index.jsx | 6 +- app/models/user.rb | 4 ++ app/views/api/v1/users/create.html.erb | 4 ++ app/views/api/v1/users/delete.html.erb | 4 ++ app/views/api/v1/users/index.html.erb | 4 ++ app/views/api/v1/users/new.html.erb | 4 ++ config/routes.rb | 4 ++ db/migrate/20240428013649_create_users.rb | 13 +++++ ..._create_active_storage_tables.active_storage.rb | 57 +++++++++++++++++++ db/schema.rb | 20 +++---- package.json | 3 +- test/controllers/api/v1/users_controller_test.rb | 23 ++++++++ test/fixtures/users.yml | 13 +++++ test/models/user_test.rb | 7 +++ 18 files changed, 212 insertions(+), 43 deletions(-) create mode 100644 app/controllers/api/v1/users_controller.rb create mode 100644 app/helpers/api/v1/users_helper.rb create mode 100644 app/models/user.rb create mode 100644 app/views/api/v1/users/create.html.erb create mode 100644 app/views/api/v1/users/delete.html.erb create mode 100644 app/views/api/v1/users/index.html.erb create mode 100644 app/views/api/v1/users/new.html.erb create mode 100644 db/migrate/20240428013649_create_users.rb create mode 100644 db/migrate/20240503001922_create_active_storage_tables.active_storage.rb create mode 100644 test/controllers/api/v1/users_controller_test.rb create mode 100644 test/fixtures/users.yml create mode 100644 test/models/user_test.rb diff --git a/app/controllers/api/v1/auth_controller.rb b/app/controllers/api/v1/auth_controller.rb index 2688074..32f33dc 100644 --- a/app/controllers/api/v1/auth_controller.rb +++ b/app/controllers/api/v1/auth_controller.rb @@ -5,10 +5,16 @@ class Api::V1::AuthController < ApplicationController @user_table ||= {} end end + def data if !cookies[:session].nil? puts cookies[:session] - render json: Api::V1::AuthController.user_table[cookies[:session]] + #render json: Api::V1::AuthController.user_table[cookies[:session]] + result = User.find_by(access_token_digest: cookies[:session]) + result[:user_data] = result[:user_data] + puts "A PREFIX SO WE CAN SEE IT" + pp result + render json: result else puts "Not logged in" end @@ -17,23 +23,38 @@ class Api::V1::AuthController < ApplicationController # user logs in through github # github redirects them to this endpoint with the token in the url as query params # we need to use this token to exchange with github for user info(i.e username) - puts "Code: #{params[:code]}" # this is the github token - puts ENV["GITHUB_CLIENT_SECRET"] - puts ENV["GITHUB_CLIENT_ID"] + #puts "Code: #{params[:code]}" # this is the github token + #puts ENV["GITHUB_CLIENT_SECRET"] + #puts ENV["GITHUB_CLIENT_ID"] access_token = get_access_token(params[:code]) - user_data = get_github_user_data(access_token) - puts "USER DATA:" - pp user_data - token = "#{user_data['id']}" - hashed_token = OpenSSL::HMAC.hexdigest(ENV["ENC_ALGO"], ENV["ENC_KEY"], token + access_token) + user_data = JSON.parse(get_github_user_data(access_token)) + #puts "------------------------- USER DATA: ------------------------- " + #pp user_data + id = user_data['id'].to_s + #puts "id: #{id}, at: #{access_token}" + + hashed_token = hash_token("#{access_token}") Api::V1::AuthController.user_table[hashed_token] = user_data - puts "Hashed Token: #{hashed_token}" + #puts "Hashed Token: #{hashed_token}" cookies[:session] = hashed_token + user_params = { + access_token_digest: hashed_token, + salt: params[:code].to_s, + user_data: user_data + } + puts "USER DATA HERE NERD" + puts user_data.class + user = User.find_or_create_by(identifier: id) + user.update(user_params) redirect_to '/' end private + def hash_token(token) + OpenSSL::HMAC.hexdigest(ENV["ENC_ALGO"], ENV["ENC_KEY"], token) + end + def get_github_user_data(access_token) uri = URI("https://api.github.com/user") headers = { Authorization: "Bearer #{access_token}" } @@ -45,20 +66,20 @@ class Api::V1::AuthController < ApplicationController puts response #if response.is_a?(Net::HTTPSuccess) #if response.body.nil? - result = response - if !result["error"].nil? - puts "Error: #{result["error"]}" - puts response - # we had an error - # TODO - else - puts "huh?" if result.nil? - return result - end + result = response + if !result["error"].nil? + puts "Error: #{result["error"]}" + puts response + # we had an error + # TODO + else + puts "huh?" if result.nil? + return result + end #else # puts "Error(body nil)" - # something went wrong? - # TODO + # something went wrong? + # TODO #end end diff --git a/app/controllers/api/v1/users_controller.rb b/app/controllers/api/v1/users_controller.rb new file mode 100644 index 0000000..f367ae4 --- /dev/null +++ b/app/controllers/api/v1/users_controller.rb @@ -0,0 +1,16 @@ +class Api::V1::UsersController < ApplicationController + def index + # return list of all users + blog = User.all.order(created_at: :desc) + render json: blog + end + + def create_or_update(user_params) + # add new user, overwrite if exists + end + + def delete + # remove user + end + +end diff --git a/app/helpers/api/v1/users_helper.rb b/app/helpers/api/v1/users_helper.rb new file mode 100644 index 0000000..4d5288c --- /dev/null +++ b/app/helpers/api/v1/users_helper.rb @@ -0,0 +1,2 @@ +module Api::V1::UsersHelper +end diff --git a/app/javascript/components/Layout.jsx b/app/javascript/components/Layout.jsx index 74568cd..6bf698a 100644 --- a/app/javascript/components/Layout.jsx +++ b/app/javascript/components/Layout.jsx @@ -3,14 +3,14 @@ import { Outlet, Link } from "react-router-dom"; export default function Layout ({userData}) { - //console.log(userData); - //const [userData, setUserData] = useState({ login: "" }); + console.log(userData); + //const [userData, setUserData] = useState({ name: "" }); return ( <>