forked from External/greenlight
		
	
							
								
								
									
										7
									
								
								app/assets/stylesheets/users.scss
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								app/assets/stylesheets/users.scss
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
				
			|||||||
 | 
					.user {
 | 
				
			||||||
 | 
					  .description {
 | 
				
			||||||
 | 
					    p {
 | 
				
			||||||
 | 
					      font-size: 14px;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -19,7 +19,7 @@ class LandingController < ApplicationController
 | 
				
			|||||||
    @room_name = params[:name]
 | 
					    @room_name = params[:name]
 | 
				
			||||||
    @user = User.find_by(username: @room_name)
 | 
					    @user = User.find_by(username: @room_name)
 | 
				
			||||||
    @meeting_token = @room_name
 | 
					    @meeting_token = @room_name
 | 
				
			||||||
    @resource = params[:resource]
 | 
					    @resource = "rooms"
 | 
				
			||||||
    @resource_url = room_url(@meeting_token)
 | 
					    @resource_url = room_url(@meeting_token)
 | 
				
			||||||
    if @user.nil?
 | 
					    if @user.nil?
 | 
				
			||||||
      redirect_to root_path
 | 
					      redirect_to root_path
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,8 +1,14 @@
 | 
				
			|||||||
class SessionsController < ApplicationController
 | 
					class SessionsController < ApplicationController
 | 
				
			||||||
  def create
 | 
					  def create
 | 
				
			||||||
    @user = User.from_omniauth(request.env['omniauth.auth'])
 | 
					    @user = User.from_omniauth(request.env['omniauth.auth'])
 | 
				
			||||||
 | 
					    if @user.persisted?
 | 
				
			||||||
      session[:user_id] = @user.id
 | 
					      session[:user_id] = @user.id
 | 
				
			||||||
      redirect_to controller: 'landing', action: 'room', name: @user.username
 | 
					      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
 | 
					  rescue => e
 | 
				
			||||||
    logger.error "Error authenticating via omniauth: #{e}"
 | 
					    logger.error "Error authenticating via omniauth: #{e}"
 | 
				
			||||||
    redirect_to root_path
 | 
					    redirect_to root_path
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										31
									
								
								app/controllers/users_controller.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								app/controllers/users_controller.rb
									
									
									
									
									
										Normal 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
 | 
				
			||||||
							
								
								
									
										2
									
								
								app/helpers/users_helper.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								app/helpers/users_helper.rb
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
				
			|||||||
 | 
					module UsersHelper
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
@@ -1,10 +1,13 @@
 | 
				
			|||||||
class User < ApplicationRecord
 | 
					class User < ApplicationRecord
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  validates :username, uniqueness: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def self.from_omniauth(auth_hash)
 | 
					  def self.from_omniauth(auth_hash)
 | 
				
			||||||
    user = find_or_create_by(uid: auth_hash['uid'], provider: auth_hash['provider'])
 | 
					    user = find_or_initialize_by(uid: auth_hash['uid'], provider: auth_hash['provider'])
 | 
				
			||||||
    user.username = self.send("#{auth_hash['provider']}_username", auth_hash) rescue nil
 | 
					    unless user.persisted?
 | 
				
			||||||
 | 
					      # user.username = self.send("#{auth_hash['provider']}_username", auth_hash) rescue nil
 | 
				
			||||||
      user.name = auth_hash['info']['name']
 | 
					      user.name = auth_hash['info']['name']
 | 
				
			||||||
    user.save!
 | 
					    end
 | 
				
			||||||
    user
 | 
					    user
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										15
									
								
								app/views/users/_form.html.erb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								app/views/users/_form.html.erb
									
									
									
									
									
										Normal 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>
 | 
				
			||||||
							
								
								
									
										3
									
								
								app/views/users/edit.html.erb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								app/views/users/edit.html.erb
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
				
			|||||||
 | 
					<div class="page-wrapper user edit">
 | 
				
			||||||
 | 
					  <%= render 'form', user: @user %>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
@@ -1,9 +1,11 @@
 | 
				
			|||||||
Rails.application.routes.draw do
 | 
					Rails.application.routes.draw do
 | 
				
			||||||
 | 
					  resources :users, only: [:edit, :update]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  get 'bbb/join/:resource/:id', to: 'bbb#join', as: :bbb_join
 | 
					  get 'bbb/join/:resource/:id', to: 'bbb#join', as: :bbb_join
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  get '/meetings/new', to: 'landing#new_meeting', as: :new_meeting
 | 
					  get '/meetings/new', to: 'landing#new_meeting', as: :new_meeting
 | 
				
			||||||
  get '/meetings(/:id)', to: 'landing#meeting', as: :meeting, :resource => "meetings"
 | 
					  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 '/auth/:provider/callback', to: 'sessions#create'
 | 
				
			||||||
  get '/logout', to: 'sessions#destroy'
 | 
					  get '/logout', to: 'sessions#destroy'
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										18
									
								
								test/controllers/users_controller_test.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								test/controllers/users_controller_test.rb
									
									
									
									
									
										Normal 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
 | 
				
			||||||
		Reference in New Issue
	
	Block a user