Merge pull request #2 from zach-chai/devise

Omniauth
This commit is contained in:
Zachary Chai 2016-10-17 16:21:36 -04:00 committed by GitHub
commit 352abe78af
16 changed files with 187 additions and 2 deletions

1
.gitignore vendored
View File

@ -16,6 +16,7 @@
/tmp/* /tmp/*
!/log/.keep !/log/.keep
!/tmp/.keep !/tmp/.keep
.env
# Ignore Byebug command history file. # Ignore Byebug command history file.
.byebug_history .byebug_history

7
Dockerfile Normal file
View File

@ -0,0 +1,7 @@
FROM ruby:2.3.1
# app dependencies
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
# app directory
RUN mkdir /usr/src/app

View File

@ -33,6 +33,7 @@ gem 'jbuilder', '~> 2.5'
group :development, :test do group :development, :test do
# Call 'byebug' anywhere in the code to stop execution and get a debugger console # Call 'byebug' anywhere in the code to stop execution and get a debugger console
gem 'byebug', platform: :mri gem 'byebug', platform: :mri
gem 'dotenv-rails'
end end
group :development do group :development do
@ -47,5 +48,7 @@ end
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem # Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby] gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
gem 'omniauth'
gem 'omniauth-twitter'
gem 'omniauth-google-oauth2'
gem 'bigbluebutton-api-ruby' gem 'bigbluebutton-api-ruby'

View File

@ -52,11 +52,18 @@ GEM
coffee-script-source (1.10.0) coffee-script-source (1.10.0)
concurrent-ruby (1.0.2) concurrent-ruby (1.0.2)
debug_inspector (0.0.2) debug_inspector (0.0.2)
dotenv (2.1.1)
dotenv-rails (2.1.1)
dotenv (= 2.1.1)
railties (>= 4.0, < 5.1)
erubis (2.7.0) erubis (2.7.0)
execjs (2.7.0) execjs (2.7.0)
faraday (0.9.2)
multipart-post (>= 1.2, < 3)
ffi (1.9.14) ffi (1.9.14)
globalid (0.3.7) globalid (0.3.7)
activesupport (>= 4.1.0) activesupport (>= 4.1.0)
hashie (3.4.6)
i18n (0.7.0) i18n (0.7.0)
jbuilder (2.6.0) jbuilder (2.6.0)
activesupport (>= 3.0.0, < 5.1) activesupport (>= 3.0.0, < 5.1)
@ -65,6 +72,8 @@ GEM
rails-dom-testing (>= 1, < 3) rails-dom-testing (>= 1, < 3)
railties (>= 4.2.0) railties (>= 4.2.0)
thor (>= 0.14, < 2.0) thor (>= 0.14, < 2.0)
json (1.8.3)
jwt (1.5.6)
listen (3.0.8) listen (3.0.8)
rb-fsevent (~> 0.9, >= 0.9.4) rb-fsevent (~> 0.9, >= 0.9.4)
rb-inotify (~> 0.9, >= 0.9.7) rb-inotify (~> 0.9, >= 0.9.7)
@ -79,9 +88,35 @@ GEM
mini_portile2 (2.1.0) mini_portile2 (2.1.0)
minitest (5.9.1) minitest (5.9.1)
multi_json (1.12.1) multi_json (1.12.1)
multi_xml (0.5.5)
multipart-post (2.0.0)
nio4r (1.2.1) nio4r (1.2.1)
nokogiri (1.6.8.1) nokogiri (1.6.8.1)
mini_portile2 (~> 2.1.0) mini_portile2 (~> 2.1.0)
oauth (0.5.1)
oauth2 (1.2.0)
faraday (>= 0.8, < 0.10)
jwt (~> 1.0)
multi_json (~> 1.3)
multi_xml (~> 0.5)
rack (>= 1.2, < 3)
omniauth (1.3.1)
hashie (>= 1.2, < 4)
rack (>= 1.0, < 3)
omniauth-google-oauth2 (0.4.1)
jwt (~> 1.5.2)
multi_json (~> 1.3)
omniauth (>= 1.1.1)
omniauth-oauth2 (>= 1.3.1)
omniauth-oauth (1.1.0)
oauth
omniauth (~> 1.0)
omniauth-oauth2 (1.4.0)
oauth2 (~> 1.0)
omniauth (~> 1.2)
omniauth-twitter (1.2.1)
json (~> 1.3)
omniauth-oauth (~> 1.1)
puma (3.6.0) puma (3.6.0)
rack (2.0.1) rack (2.0.1)
rack-test (0.6.3) rack-test (0.6.3)
@ -160,9 +195,13 @@ DEPENDENCIES
bigbluebutton-api-ruby bigbluebutton-api-ruby
byebug byebug
coffee-rails (~> 4.2) coffee-rails (~> 4.2)
dotenv-rails
jbuilder (~> 2.5) jbuilder (~> 2.5)
jquery-rails jquery-rails
listen (~> 3.0.5) listen (~> 3.0.5)
omniauth
omniauth-google-oauth2
omniauth-twitter
puma (~> 3.0) puma (~> 3.0)
rails (~> 5.0.0, >= 5.0.0.1) rails (~> 5.0.0, >= 5.0.0.1)
sass-rails (~> 5.0) sass-rails (~> 5.0)
@ -175,4 +214,4 @@ DEPENDENCIES
web-console web-console
BUNDLED WITH BUNDLED WITH
1.13.2 1.13.4

View File

@ -1,3 +1,8 @@
class ApplicationController < ActionController::Base class ApplicationController < ActionController::Base
protect_from_forgery with: :exception protect_from_forgery with: :exception
def current_user
@current_user ||= User.find_by(id: session[:user_id])
end
helper_method :current_user
end end

View File

@ -0,0 +1,17 @@
class SessionsController < ApplicationController
def create
@user = User.from_omniauth(request.env['omniauth.auth'])
session[:user_id] = @user.id
rescue => e
logger.error "Error authenticating via omniauth: #{e}"
ensure
redirect_to root_path
end
def destroy
if current_user
session.delete(:user_id)
end
redirect_to root_path
end
end

9
app/models/user.rb Normal file
View File

@ -0,0 +1,9 @@
class User < ApplicationRecord
def self.from_omniauth(auth_hash)
user = find_or_create_by(uid: auth_hash['uid'], provider: auth_hash['provider'])
user.name = auth_hash['info']['name']
user.save!
user
end
end

View File

@ -33,3 +33,13 @@
<div id="landing_page_footer_oauth_append"> <div id="landing_page_footer_oauth_append">
<p>You can have a personal URL (with recordings) by signing in below</p> <p>You can have a personal URL (with recordings) by signing in below</p>
</div> </div>
<% if current_user.nil? %>
<ul>
<li><%= link_to 'Twitter', '/auth/twitter' %></li>
<li><%= link_to 'Google', '/auth/google' %></li>
</ul>
<% else %>
<div>Hello <%= current_user.name %></div>
<%= link_to 'Logout', '/logout' %>
<% end %>

View File

@ -0,0 +1,5 @@
Rails.application.config.middleware.use OmniAuth::Builder do
provider :twitter, ENV['TWITTER_ID'], ENV['TWITTER_SECRET']
provider :google_oauth2, ENV['GOOGLE_OAUTH2_ID'], ENV['GOOGLE_OAUTH2_SECRET'],
scope: 'profile', access_type: 'online', name: 'google'
end

View File

@ -1,5 +1,7 @@
Rails.application.routes.draw do Rails.application.routes.draw do
get 'meeting(/:id)', to: 'landing#index' get 'meeting(/:id)', to: 'landing#index'
get '/auth/:provider/callback', to: 'sessions#create'
get '/logout', to: 'sessions#destroy'
root to: 'landing#index' root to: 'landing#index'
# For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html

View File

@ -0,0 +1,15 @@
class CreateUsers < ActiveRecord::Migration[5.0]
def change
create_table :users do |t|
t.string :provider, null: false
t.string :uid, null: false
t.string :name
t.timestamps
end
add_index :users, :provider
add_index :users, :uid
add_index :users, [:provider, :uid], unique: true
end
end

26
db/schema.rb Normal file
View File

@ -0,0 +1,26 @@
# This file is auto-generated from the current state of the database. Instead
# of editing this file, please use the migrations feature of Active Record to
# incrementally modify your database, and then regenerate this schema definition.
#
# Note that this schema.rb definition is the authoritative source for your
# database schema. If you need to create the application database on another
# system, you should be using db:schema:load, not running all the migrations
# from scratch. The latter is a flawed and unsustainable approach (the more migrations
# you'll amass, the slower it'll run and the greater likelihood for issues).
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20161017160526) do
create_table "users", force: :cascade do |t|
t.string "provider", null: false
t.string "uid", null: false
t.string "name"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["provider", "uid"], name: "index_users_on_provider_and_uid", unique: true
t.index ["provider"], name: "index_users_on_provider"
t.index ["uid"], name: "index_users_on_uid"
end
end

24
docker-compose.yml Normal file
View File

@ -0,0 +1,24 @@
version: '2'
services:
web:
build: .
ports:
- '80:80'
volumes:
- '.:/usr/src/app'
- '~/.ssh:/root/.ssh/'
volumes_from:
- gem_cache
expose:
- '3001'
working_dir: '/usr/src/app'
stdin_open: true
tty: true
command: bundle exec rails s -p 80 -b '0.0.0.0'
depends_on:
- gem_cache
gem_cache:
image: ruby:2.3.1
command: bin/true
volumes:
- /usr/local/bundle

4
sample.env Normal file
View File

@ -0,0 +1,4 @@
TWITTER_ID=
TWITTER_SECRET=
GOOGLE_OAUTH2_ID=
GOOGLE_OAUTH2_SECRET=

11
test/fixtures/users.yml vendored Normal file
View File

@ -0,0 +1,11 @@
# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
one:
provider: MyString
uid: MyString
name: MyString
two:
provider: MyString
uid: MyString
name: MyString

7
test/models/user_test.rb Normal file
View File

@ -0,0 +1,7 @@
require 'test_helper'
class UserTest < ActiveSupport::TestCase
# test "the truth" do
# assert true
# end
end