diff --git a/app/assets/stylesheets/users.scss b/app/assets/stylesheets/users.scss new file mode 100644 index 00000000..1f8f00c4 --- /dev/null +++ b/app/assets/stylesheets/users.scss @@ -0,0 +1,7 @@ +.user { + .description { + p { + font-size: 14px; + } + } +} diff --git a/app/controllers/landing_controller.rb b/app/controllers/landing_controller.rb index 3d770fa2..3c5bacd5 100644 --- a/app/controllers/landing_controller.rb +++ b/app/controllers/landing_controller.rb @@ -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 diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb index 83820889..44266ed2 100644 --- a/app/controllers/sessions_controller.rb +++ b/app/controllers/sessions_controller.rb @@ -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 diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb new file mode 100644 index 00000000..01a1214e --- /dev/null +++ b/app/controllers/users_controller.rb @@ -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 diff --git a/app/helpers/users_helper.rb b/app/helpers/users_helper.rb new file mode 100644 index 00000000..2310a240 --- /dev/null +++ b/app/helpers/users_helper.rb @@ -0,0 +1,2 @@ +module UsersHelper +end diff --git a/app/models/user.rb b/app/models/user.rb index 487fdcbc..c0d1a87b 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -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 diff --git a/app/views/users/_form.html.erb b/app/views/users/_form.html.erb new file mode 100644 index 00000000..e776c0ee --- /dev/null +++ b/app/views/users/_form.html.erb @@ -0,0 +1,15 @@ +
This username will be used to identify your personal room
+