diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 05b907a..c477a6c 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -43,10 +43,15 @@ class UsersController < ApplicationController end def new - @user = User.new + unless session[:cached_user]&.blank? + @user = User.new(JSON.parse(session[:cached_user])) rescue nil + session.delete :cached_user + end + @user ||= User.new @user.profile = Profile.new @user.lastip = request.env['REMOTE_ADDR'] @user.can_create? cuser + @user.preformat end def edit @@ -63,6 +68,7 @@ class UsersController < ApplicationController redirect_to action: :show, id: @user.id save_session @user else + @user.preformat render :new end end @@ -86,12 +92,28 @@ class UsersController < ApplicationController end def callback - @user = User.focfah(auth_hash, request.ip) - login_user(@user) - if @user.created_at > (Time.zone.now - 1.week) - flash[:notice] << t(:users_signup_steam) - render :edit + @user = User.find_or_build(auth_hash, request.ip) + unless @user and @user.is_a?(ActiveRecord::Base) + flash[:error] = t(:users_callback_fail) + redirect_to_home + return + end + + # After steam validates SteamID, we know its right. + session[:verified_steamid] = @user.steamid + + # Store user in session store + session[:cached_user] = @user.to_json + + if @user.new_record? + # If user mistypes username and password, return to user creation page. + session[:return_to] = new_user_url(@user) + + # if @user.created_at > (Time.zone.now - 1.week) + # flash[:notice] = t(:users_signup_steam) + render :new else + login_user(@user) return_back end end @@ -134,9 +156,16 @@ class UsersController < ApplicationController if user.banned? Ban::TYPE_SITE flash[:error] = t(:accounts_locked) else - flash[:notice] = "%s (%s)" % [t(:login_successful), user.password_hash_s] + flash[:notice] = "%s" % [t(:login_successful)] # FIXME: this doesn't work because model is saved before flash[:notice] << " \n%s" % I18n.t(:password_md5_scrypt) if user.password_hash_changed? + if !session[:verified_steamid].blank? and \ + user.steamid != session[:verified_steamid] and \ + user.update_attribute(:steamid, session[:verified_steamid]) + session[:return_to] = edit_user_path(user) + flash[:notice] << t(:users_steamid_update) % [user.steamid] + session.delete :verified_steamid + end save_session user end end diff --git a/app/models/user.rb b/app/models/user.rb index cfa8629..8c773a1 100755 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -258,6 +258,10 @@ class User < ActiveRecord::Base team ? teamers.active.of_team(team).first : nil end + def preformat + self.email = "" if self.email.include?("@ensl.org") + end + def banned? type = Ban::TYPE_SITE bans.effective.where(ban_type: type).count > 0 end @@ -353,7 +357,7 @@ class User < ActiveRecord::Base generate_password end unless profile&.present? - self.profile = Profile.new + self.build_profile end end @@ -516,7 +520,7 @@ class User < ActiveRecord::Base params.require(:user).permit(*allowed) end - def self.focfah(auth_hash, lastip) + def self.find_or_build(auth_hash, lastip) return nil unless auth_hash&.include?(:provider) case auth_hash[:provider] when 'steam' @@ -526,11 +530,11 @@ class User < ActiveRecord::Base unless user user = User.new(username: auth_hash[:info][:nickname], lastip: lastip, fullname: auth_hash[:info][:name], steamid: steamid) user.fix_attributes + user.build_profile # TODO: user make valid by force # user.profile.country # get profile picture, :image # This really shouldn't fail. - user.save! end return user end diff --git a/app/views/users/new.html.erb b/app/views/users/new.html.erb index 8aac041..f0150ea 100644 --- a/app/views/users/new.html.erb +++ b/app/views/users/new.html.erb @@ -1,50 +1,71 @@