Merge pull request #12 from zach-chai/username_step

username
This commit is contained in:
Zachary Chai 2016-10-19 14:32:07 -04:00 committed by GitHub
commit b6e17b88c7
10 changed files with 95 additions and 8 deletions

View File

@ -0,0 +1,7 @@
.user {
.description {
p {
font-size: 14px;
}
}
}

View File

@ -19,7 +19,7 @@ class LandingController < ApplicationController
@room_name = params[:name]
@user = User.find_by(username: @room_name)
@meeting_token = @room_name
@resource = params[:resource]
@resource = "rooms"
@resource_url = room_url(@meeting_token)
if @user.nil?
redirect_to root_path

View File

@ -1,8 +1,14 @@
class SessionsController < ApplicationController
def create
@user = User.from_omniauth(request.env['omniauth.auth'])
session[:user_id] = @user.id
redirect_to controller: 'landing', action: 'room', name: @user.username
if @user.persisted?
session[:user_id] = @user.id
redirect_to controller: 'landing', action: 'room', name: @user.username
else
@user.save!
session[:user_id] = @user.id
redirect_to controller: 'users', action: 'edit', id: @user.id
end
rescue => e
logger.error "Error authenticating via omniauth: #{e}"
redirect_to root_path

View File

@ -0,0 +1,31 @@
class UsersController < ApplicationController
before_action :set_user, only: [:edit, :update]
# GET /users/1/edit
def edit
end
# PATCH/PUT /users/1
# PATCH/PUT /users/1.json
def update
if @user.update(user_params)
redirect_to controller: 'landing', action: 'room', name: @user.username
else
render :edit
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_user
@user = User.find(params[:id])
if @user.username
raise ActionController::RoutingError.new('Not Found')
end
end
# Never trust parameters from the scary internet, only allow the white list through.
def user_params
params.require(:user).permit(:username)
end
end

View File

@ -0,0 +1,2 @@
module UsersHelper
end

View File

@ -1,10 +1,13 @@
class User < ApplicationRecord
validates :username, uniqueness: true
def self.from_omniauth(auth_hash)
user = find_or_create_by(uid: auth_hash['uid'], provider: auth_hash['provider'])
user.username = self.send("#{auth_hash['provider']}_username", auth_hash) rescue nil
user.name = auth_hash['info']['name']
user.save!
user = find_or_initialize_by(uid: auth_hash['uid'], provider: auth_hash['provider'])
unless user.persisted?
# user.username = self.send("#{auth_hash['provider']}_username", auth_hash) rescue nil
user.name = auth_hash['info']['name']
end
user
end

View File

@ -0,0 +1,15 @@
<div class="col-sm-4 col-sm-offset-4">
<div class="jumbotron">
<h4>Enter Username below</h4>
<%= form_for(user, html: {class: "form-inline"}) do |f| %>
<div class="form-group">
<%= f.text_field :username, placeholder: "Username", class: "form-control input" %>
</div>
<%= f.submit class: "btn btn-success", value: "Save" %>
<% end %>
<div class="description">
<p>This username will be used to identify your personal room</p>
</div>
</div>
</div>

View File

@ -0,0 +1,3 @@
<div class="page-wrapper user edit">
<%= render 'form', user: @user %>
</div>

View File

@ -1,9 +1,11 @@
Rails.application.routes.draw do
resources :users, only: [:edit, :update]
get 'bbb/join/:resource/:id', to: 'bbb#join', as: :bbb_join
get '/meetings/new', to: 'landing#new_meeting', as: :new_meeting
get '/meetings(/:id)', to: 'landing#meeting', as: :meeting, :resource => "meetings"
get '/rooms/:name', to: 'landing#room', as: :room, :resource => "rooms"
get '/rooms/:name', to: 'landing#room', as: :room
get '/auth/:provider/callback', to: 'sessions#create'
get '/logout', to: 'sessions#destroy'

View File

@ -0,0 +1,18 @@
require 'test_helper'
class UsersControllerTest < ActionDispatch::IntegrationTest
setup do
@user = users(:one)
end
test "should get edit" do
get edit_user_url(@user)
assert_response :success
end
test "should update user" do
patch user_url(@user), params: { user: { username: @user.username } }
assert_redirected_to user_url(@user)
end
end