ADD educode user login

This commit is contained in:
Jasder
2020-08-14 18:19:00 +08:00
parent 5bd8079386
commit c1b0061b8d
15 changed files with 309 additions and 19 deletions

View File

@@ -13,24 +13,12 @@ class AccountsController < ApplicationController
password = params[:password]
platform = (params[:platform] || 'forge')&.gsub(/\s+/, "")
@user = User.new(admin: false, login: username, mail: email, type: "User")
@user.password = password
@user.platform = platform
@user.activate
ActiveRecord::Base.transaction do
interactor = Gitea::RegisterInteractor.call({username: username, email: email, password: password})
if interactor.success?
gitea_user = interactor.result
result = Gitea::User::GenerateTokenService.new(username, password).call
@user.gitea_token = result['sha1']
@user.gitea_uid = gitea_user['id']
if @user.save!
UserExtension.create!(user_id: @user.id)
render_ok({user: {id: @user.id, token: @user.gitea_token}})
end
result = autologin_register(username, email, password, platform)
if result[:message].blank?
render_ok({user: result[:user]})
else
render_error(interactor.error)
render_error(result[:message])
end
end
rescue Exception => e

View File

@@ -9,7 +9,8 @@ class ApplicationController < ActionController::Base
include GitHelper
include LoggerHelper
include LoginHelper
include RegisterHelper
protect_from_forgery prepend: true, unless: -> { request.format.json? }
before_action :check_sign

View File

@@ -0,0 +1,28 @@
module RegisterHelper
extend ActiveSupport::Concern
def autologin_register(username, email, password, platform= '')
result = {message: nil, user: nil}
user = User.new(admin: false, login: username, mail: email, type: "User")
user.password = password
user.platform = platform
user.activate
interactor = Gitea::RegisterInteractor.call({username: username, email: email, password: password})
if interactor.success?
gitea_user = interactor.result
result = Gitea::User::GenerateTokenService.new(username, password).call
user.gitea_token = result['sha1']
user.gitea_uid = gitea_user['id']
if user.save!
UserExtension.create!(user_id: user.id)
result[:user] = {id: user.id, token: user.gitea_token}
end
else
result[:message] = interactor.error
end
result
end
end

View File

@@ -0,0 +1,36 @@
class Oauth::EducoderController < Oauth::BaseController
def bind
begin
login = params[:login]
callback_url = params[:callback_url]
oauth_token = params[:key]
raw_pay_load = params[:raw_pay_load]
::OauthEducoderForm.new({login: login, oauth_token: oauth_token, callback_url: callback_url, raw_pay_load: raw_pay_load}).validate!
open_user= OpenUser::Educoder.find_by(uid: login)
if open_user.present? && open_user.user.present? && open_user.user.email_bind?
# 存在说明绑定了,验证信息是否齐全,
if current_user != open_user.user
logout_user
successful_authentication(open_user.user)
end
redirect_to callback_url
else
# 未存在需要进行绑定
if current_user.blank? || !current_user.logged?
# forge平台未登录
redirect_to oauth_register_path(user_id: login, callback_url: callback_url)
else
# forge平台已登录
OpenUsers::Educoder.create!(user: current_user, uid: login)
redirect_to callback_url
end
end
rescue WechatOauth::Error => ex
render_error(ex.message)
end
end
end

View File

@@ -1,4 +1,6 @@
class OauthController < ApplicationController
layout "oauth_register", only: [:register]
DEFAULT_PASSWORD = "a12345678"
TOKEN_CALL_BACK = "/oauth/get_token_callback"
USER_INFO = "/oauth/userinfo"
@@ -51,4 +53,24 @@ class OauthController < ApplicationController
def get_token_callback
end
def register
# redirect_to params[:callback_url]
end
def auto_register
login = params[:login]
email = params[:email]
password = params[:login]
platform = params[:plathform] || 'forge'
result = autologin_register(login, email, password, platform)
if result[:message].blank?
redirect_to params[:callback_url]
else
render :action => "auto_register"
end
end
end