From 0d97d7d4f0ac5c19a3b0cd4136bb205f8a076730 Mon Sep 17 00:00:00 2001 From: "vilet.yy" Date: Thu, 1 Apr 2021 18:01:51 +0800 Subject: [PATCH 01/20] add: educoder third party --- app/controllers/oauth/base_controller.rb | 22 ++++++++++++ app/controllers/oauth/educoder_controller.rb | 28 +++++++++++++++ app/controllers/settings_controller.rb | 10 +++++- app/libs/educoder_oauth.rb | 18 ++++++++++ app/libs/educoder_oauth/service.rb | 37 ++++++++++++++++++++ app/views/settings/show.json.jbuilder | 1 + config/configuration.yml.example | 4 +++ config/initializers/educoder_oauth_init.rb | 15 ++++++++ config/routes.rb | 1 + 9 files changed, 135 insertions(+), 1 deletion(-) create mode 100644 app/libs/educoder_oauth.rb create mode 100644 app/libs/educoder_oauth/service.rb create mode 100644 config/initializers/educoder_oauth_init.rb diff --git a/app/controllers/oauth/base_controller.rb b/app/controllers/oauth/base_controller.rb index 3fe349bb..6956c9ce 100644 --- a/app/controllers/oauth/base_controller.rb +++ b/app/controllers/oauth/base_controller.rb @@ -2,6 +2,7 @@ class Oauth::BaseController < ActionController::Base include RenderHelper include LoginHelper include ControllerRescueHandler + include LoggerHelper # include LaboratoryHelper skip_before_action :verify_authenticity_token @@ -11,6 +12,18 @@ class Oauth::BaseController < ActionController::Base end private + def tip_exception(status = -1, message) + raise Educoder::TipException.new(status, message) + end + + def tip_show_exception(status = -2, message) + raise Educoder::TipException.new(status, message) + end + + def tip_show(exception) + uid_logger("Tip show status is #{exception.status}, message is #{exception.message}") + render json: exception.tip_json + end def session_user_id # session[:user_id] @@ -48,4 +61,13 @@ class Oauth::BaseController < ActionController::Base Rails.logger.info("[wechat] set session unionid: #{unionid}") session[:unionid] = unionid end + + def session_edulogin + session[:edulogin] + end + + def set_session_edulogin(login) + Rails.logger.info("[educoder] set sesstion edulogin: #{login}") + session[:edulogin] = login + end end diff --git a/app/controllers/oauth/educoder_controller.rb b/app/controllers/oauth/educoder_controller.rb index 8ed537d6..cc9ad896 100644 --- a/app/controllers/oauth/educoder_controller.rb +++ b/app/controllers/oauth/educoder_controller.rb @@ -32,4 +32,32 @@ class Oauth::EducoderController < Oauth::BaseController render_error(ex.message) end end + + # 需要educoder那边设置回调地址 + def create + begin + code = params['code'].to_s.strip + tip_exception("code不能为空") if code.blank? + new_user = false + result = EducoderOauth::Service.access_token(code, [request.protocol, request.host_with_port, '/api/auth/educoder/callback'].join('')) + result = EducoderOauth::Service.user_info(result[:access_token]) + + # 存在该用户 + open_user = OpenUsers::Educoder.find_by(uid: result['login']) + if open_user.present? && open_user.user.present? + successful_authentication(open_user.user) + else + if current_user.blank? || !current_user.logged? + new_user = true + set_session_edulogin(result['login']) + else + OpenUsers::Educoder.create!(user: current_user, uid: result['login'], extra: result) + end + end + + render_ok(new_user: new_user) + rescue Exception => ex + render_error(ex.message) + end + end end diff --git a/app/controllers/settings_controller.rb b/app/controllers/settings_controller.rb index b6662f66..eab27636 100644 --- a/app/controllers/settings_controller.rb +++ b/app/controllers/settings_controller.rb @@ -4,7 +4,7 @@ class SettingsController < ApplicationController get_add_menu get_common_menu get_personal_menu - + get_third_party end private @@ -40,6 +40,14 @@ class SettingsController < ApplicationController end end + def get_third_party + @third_party = [] + @third_party << { + name: 'educoder', + url: EducoderOauth.oauth_url([request.protocol, request.host_with_port, '/api/auth/educoder/callback'].join('')) + } + end + def get_site_url(key, value) key.to_s === "url" ? append_http(reset_site_url(value)) : reset_site_url(value) end diff --git a/app/libs/educoder_oauth.rb b/app/libs/educoder_oauth.rb new file mode 100644 index 00000000..3fa06dcd --- /dev/null +++ b/app/libs/educoder_oauth.rb @@ -0,0 +1,18 @@ +module EducoderOauth + class << self + attr_accessor :client_id, :client_secret, :base_url + + def logger + @_logger ||= STDOUT + end + + def logger=(l) + @_logger = l + end + + def oauth_url(redirect_uri) + "#{base_url}/oauth2?call_url=/oauth/authorize?client_id=#{client_id}&redirect_uri=#{URI.encode_www_form_component(redirect_uri)}&response_type=code" + end + + end +end \ No newline at end of file diff --git a/app/libs/educoder_oauth/service.rb b/app/libs/educoder_oauth/service.rb new file mode 100644 index 00000000..29f5f1eb --- /dev/null +++ b/app/libs/educoder_oauth/service.rb @@ -0,0 +1,37 @@ +require 'oauth2' + +module EducoderOauth::Service + module_function + + def request(method, url, params) + begin + Rails.logger.info("[EducoderOauth] [#{method.to_s.upcase}] #{url} || #{params}") + + client = Faraday.new(url: EducoderOauth.base_url) + response = client.public_send(method, url, params) + result = JSON.parse(response.body) + + Rails.logger.info("[EducoderOauth] [#{response.status}] #{result}") + + result + rescue Exception => e + raise Educoder::TipException.new(e.message) + end + end + + def access_token(code, redirect_uri) + begin + Rails.logger.info("[EducoderOauth] [code] #{code} ") + Rails.logger.info("[EducoderOauth] [redirect_uri] #{redirect_uri} ") + client = OAuth2::Client.new(EducoderOauth.client_id, EducoderOauth.client_secret, site: EducoderOauth.base_url) + result = client.auth_code.get_token(code, redirect_uri: redirect_uri).to_hash + return result + rescue Exception => e + raise Educoder::TipException.new(e.message) + end + end + + def user_info(access_token) + request(:get, '/api/users/info.json', {access_token: access_token}) + end +end \ No newline at end of file diff --git a/app/views/settings/show.json.jbuilder b/app/views/settings/show.json.jbuilder index 330966aa..ea42f20b 100644 --- a/app/views/settings/show.json.jbuilder +++ b/app/views/settings/show.json.jbuilder @@ -56,4 +56,5 @@ json.setting do end json.common @common + json.third_party @third_party end diff --git a/config/configuration.yml.example b/config/configuration.yml.example index 823d8547..1bb25ec3 100644 --- a/config/configuration.yml.example +++ b/config/configuration.yml.example @@ -43,6 +43,10 @@ default: &default cate_id: '-1' callback_url: 'callback_url' signature_key: 'test12345678' + educoder: + client_id: 'e9ce4d5ba1698d6f7d01d8ee2959776c7a6d743ebe94da2341e288fd2fbf60aa' + client_secret: '6ff84dd75eddd859c5bd0e7a791b58bc5ad1ba4fbb30bc9db37cb0baf9f33012' + base_url: 'https://test-data.educoder.net' gitea: access_key_id: 'root' diff --git a/config/initializers/educoder_oauth_init.rb b/config/initializers/educoder_oauth_init.rb new file mode 100644 index 00000000..1ef46bc9 --- /dev/null +++ b/config/initializers/educoder_oauth_init.rb @@ -0,0 +1,15 @@ +oauth_config = {} +begin + config = Rails.application.config_for(:configuration) + oauth_config = config.dig('oauth', 'educoder') + raise 'oauth educoder config missing' if oauth_config.blank? +rescue => ex + raise ex if Rails.env.production? + + puts %Q{\033[33m [warning] wechat oauth config or configuration.yml missing, + please add it or execute 'cp config/configuration.yml.example config/configuration.yml' \033[0m} +end + +EducoderOauth.client_id = oauth_config['client_id'] +EducoderOauth.client_secret = oauth_config['client_secret'] +EducoderOauth.base_url = oauth_config['base_url'] diff --git a/config/routes.rb b/config/routes.rb index daef12bb..fec562ac 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -312,6 +312,7 @@ Rails.application.routes.draw do get '/auth/qq/callback', to: 'oauth/qq#create' get '/auth/wechat/callback', to: 'oauth/wechat#create' + get '/auth/educoder/callback', to: 'oauth/educoder#create' resource :bind_user, only: [:create] resources :hot_keywords, only: [:index] From f732b0374cc8b551b629f3a37de6754bbd532737 Mon Sep 17 00:00:00 2001 From: "vilet.yy" Date: Fri, 2 Apr 2021 09:23:11 +0800 Subject: [PATCH 02/20] fix: ceshi --- app/controllers/oauth/educoder_controller.rb | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/app/controllers/oauth/educoder_controller.rb b/app/controllers/oauth/educoder_controller.rb index cc9ad896..a79a3dd0 100644 --- a/app/controllers/oauth/educoder_controller.rb +++ b/app/controllers/oauth/educoder_controller.rb @@ -1,4 +1,6 @@ class Oauth::EducoderController < Oauth::BaseController + include RegisterHelper + def bind begin login = params[:login] @@ -38,8 +40,13 @@ class Oauth::EducoderController < Oauth::BaseController begin code = params['code'].to_s.strip tip_exception("code不能为空") if code.blank? + redirect_uri = [request.protocol, request.host_with_port, '/api/auth/educoder/callback'].join('') + Rails.logger.info redirect_uri + redirect_uri = 'https://testforgeplus.trustie.net/api/auth/educoder/callback' + Rails.logger.info redirect_uri + new_user = false - result = EducoderOauth::Service.access_token(code, [request.protocol, request.host_with_port, '/api/auth/educoder/callback'].join('')) + result = EducoderOauth::Service.access_token(code, redirect_uri) result = EducoderOauth::Service.user_info(result[:access_token]) # 存在该用户 @@ -49,13 +56,20 @@ class Oauth::EducoderController < Oauth::BaseController else if current_user.blank? || !current_user.logged? new_user = true - set_session_edulogin(result['login']) + login = User.generate_login('E') + reg_result = autologin_register(login,"#{login}@forge.com", "Ec#{login}2021#", 'educoder') + if reg_result[:message].blank? + open_user = OpenUsers::Educoder.create!(user_id: reg_result[:user][:id], uid: result['login'], extra: result) + successful_authentication(open_user.user) + else + render_error(reg_result[:message]) + end else OpenUsers::Educoder.create!(user: current_user, uid: result['login'], extra: result) end end - render_ok(new_user: new_user) + redirect_to root_path(new_user: new_user) rescue Exception => ex render_error(ex.message) end From 1153bd5ab66f11e4b61e00d26103b6646e86f880 Mon Sep 17 00:00:00 2001 From: "vilet.yy" Date: Fri, 2 Apr 2021 09:43:18 +0800 Subject: [PATCH 03/20] fix: set redirect_uri --- app/controllers/oauth/educoder_controller.rb | 6 +----- app/controllers/settings_controller.rb | 2 +- app/libs/educoder_oauth.rb | 4 ++-- app/libs/educoder_oauth/service.rb | 6 +++--- config/configuration.yml.example | 1 + config/initializers/educoder_oauth_init.rb | 1 + 6 files changed, 9 insertions(+), 11 deletions(-) diff --git a/app/controllers/oauth/educoder_controller.rb b/app/controllers/oauth/educoder_controller.rb index a79a3dd0..685e245c 100644 --- a/app/controllers/oauth/educoder_controller.rb +++ b/app/controllers/oauth/educoder_controller.rb @@ -40,13 +40,9 @@ class Oauth::EducoderController < Oauth::BaseController begin code = params['code'].to_s.strip tip_exception("code不能为空") if code.blank? - redirect_uri = [request.protocol, request.host_with_port, '/api/auth/educoder/callback'].join('') - Rails.logger.info redirect_uri - redirect_uri = 'https://testforgeplus.trustie.net/api/auth/educoder/callback' - Rails.logger.info redirect_uri new_user = false - result = EducoderOauth::Service.access_token(code, redirect_uri) + result = EducoderOauth::Service.access_token(code) result = EducoderOauth::Service.user_info(result[:access_token]) # 存在该用户 diff --git a/app/controllers/settings_controller.rb b/app/controllers/settings_controller.rb index eab27636..b03edb1f 100644 --- a/app/controllers/settings_controller.rb +++ b/app/controllers/settings_controller.rb @@ -44,7 +44,7 @@ class SettingsController < ApplicationController @third_party = [] @third_party << { name: 'educoder', - url: EducoderOauth.oauth_url([request.protocol, request.host_with_port, '/api/auth/educoder/callback'].join('')) + url: EducoderOauth.oauth_url } end diff --git a/app/libs/educoder_oauth.rb b/app/libs/educoder_oauth.rb index 3fa06dcd..0c3fb61b 100644 --- a/app/libs/educoder_oauth.rb +++ b/app/libs/educoder_oauth.rb @@ -1,6 +1,6 @@ module EducoderOauth class << self - attr_accessor :client_id, :client_secret, :base_url + attr_accessor :client_id, :client_secret, :base_url, :redirect_uri def logger @_logger ||= STDOUT @@ -10,7 +10,7 @@ module EducoderOauth @_logger = l end - def oauth_url(redirect_uri) + def oauth_url "#{base_url}/oauth2?call_url=/oauth/authorize?client_id=#{client_id}&redirect_uri=#{URI.encode_www_form_component(redirect_uri)}&response_type=code" end diff --git a/app/libs/educoder_oauth/service.rb b/app/libs/educoder_oauth/service.rb index 29f5f1eb..9d93d314 100644 --- a/app/libs/educoder_oauth/service.rb +++ b/app/libs/educoder_oauth/service.rb @@ -19,12 +19,12 @@ module EducoderOauth::Service end end - def access_token(code, redirect_uri) + def access_token(code) begin Rails.logger.info("[EducoderOauth] [code] #{code} ") - Rails.logger.info("[EducoderOauth] [redirect_uri] #{redirect_uri} ") + Rails.logger.info("[EducoderOauth] [redirect_uri] #{EducoderOauth.redirect_uri} ") client = OAuth2::Client.new(EducoderOauth.client_id, EducoderOauth.client_secret, site: EducoderOauth.base_url) - result = client.auth_code.get_token(code, redirect_uri: redirect_uri).to_hash + result = client.auth_code.get_token(code, redirect_uri: EducoderOauth.redirect_uri).to_hash return result rescue Exception => e raise Educoder::TipException.new(e.message) diff --git a/config/configuration.yml.example b/config/configuration.yml.example index 1bb25ec3..3c2d90b7 100644 --- a/config/configuration.yml.example +++ b/config/configuration.yml.example @@ -47,6 +47,7 @@ default: &default client_id: 'e9ce4d5ba1698d6f7d01d8ee2959776c7a6d743ebe94da2341e288fd2fbf60aa' client_secret: '6ff84dd75eddd859c5bd0e7a791b58bc5ad1ba4fbb30bc9db37cb0baf9f33012' base_url: 'https://test-data.educoder.net' + redirect_uri: 'https://testforgeplus.trustie.net/api/auth/educoder/callback' gitea: access_key_id: 'root' diff --git a/config/initializers/educoder_oauth_init.rb b/config/initializers/educoder_oauth_init.rb index 1ef46bc9..0f47cc7c 100644 --- a/config/initializers/educoder_oauth_init.rb +++ b/config/initializers/educoder_oauth_init.rb @@ -13,3 +13,4 @@ end EducoderOauth.client_id = oauth_config['client_id'] EducoderOauth.client_secret = oauth_config['client_secret'] EducoderOauth.base_url = oauth_config['base_url'] +EducoderOauth.redirect_uri = oauth_config['redirect_uri'] From c4a43c439237cba47c8a5555c54294fda57fa15b Mon Sep 17 00:00:00 2001 From: "vilet.yy" Date: Fri, 2 Apr 2021 16:44:36 +0800 Subject: [PATCH 04/20] add: need edit user password --- app/controllers/application_controller.rb | 1 - app/controllers/concerns/register_helper.rb | 8 ++++++-- app/controllers/oauth/educoder_controller.rb | 2 +- app/models/user.rb | 15 ++++++++++++++- app/services/projects/fork_service.rb | 2 ++ app/views/users/get_user_info.json.jbuilder | 1 + 6 files changed, 24 insertions(+), 5 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index ee81765a..14892ce7 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -329,7 +329,6 @@ class ApplicationController < ActionController::Base User.current = user end end - # if !User.current.logged? && Rails.env.development? # User.current = User.find 1 # end diff --git a/app/controllers/concerns/register_helper.rb b/app/controllers/concerns/register_helper.rb index 3a23a210..f4087290 100644 --- a/app/controllers/concerns/register_helper.rb +++ b/app/controllers/concerns/register_helper.rb @@ -1,13 +1,17 @@ module RegisterHelper extend ActiveSupport::Concern - def autologin_register(username, email, password, platform= 'forge') + def autologin_register(username, email, password, platform= 'forge', need_edit_password = false) result = {message: nil, user: nil} user = User.new(admin: false, login: username, mail: email, type: "User") user.password = password user.platform = platform - user.activate + if need_edit_password + user.need_edit_password + else + user.activate + end return unless user.valid? diff --git a/app/controllers/oauth/educoder_controller.rb b/app/controllers/oauth/educoder_controller.rb index 685e245c..51b0e7a8 100644 --- a/app/controllers/oauth/educoder_controller.rb +++ b/app/controllers/oauth/educoder_controller.rb @@ -53,7 +53,7 @@ class Oauth::EducoderController < Oauth::BaseController if current_user.blank? || !current_user.logged? new_user = true login = User.generate_login('E') - reg_result = autologin_register(login,"#{login}@forge.com", "Ec#{login}2021#", 'educoder') + reg_result = autologin_register(login,"#{login}@forge.com", "Ec#{login}2021#", 'educoder', true) if reg_result[:message].blank? open_user = OpenUsers::Educoder.create!(user_id: reg_result[:user][:id], uid: result['login'], extra: result) successful_authentication(open_user.user) diff --git a/app/models/user.rb b/app/models/user.rb index 5bfe3b6e..5d03498c 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -79,6 +79,7 @@ class User < Owner STATUS_ACTIVE = 1 STATUS_REGISTERED = 2 STATUS_LOCKED = 3 + STATUS_EDIT_PASSWORD = 4 # tpi tpm权限控制 EDU_ADMIN = 1 # 超级管理员 @@ -161,7 +162,7 @@ class User < Owner has_many :organizations, through: :organization_users # Groups and active users - scope :active, lambda { where(status: STATUS_ACTIVE) } + scope :active, lambda { where(status: [STATUS_ACTIVE, STATUS_EDIT_PASSWORD]) } scope :like, lambda { |keywords| where("LOWER(concat(lastname, firstname, login, mail)) LIKE ?", "%#{keywords.split(" ").join('|')}%") unless keywords.blank? } @@ -378,6 +379,10 @@ class User < Owner status == STATUS_LOCKED end + def need_edit_password? + status == STATUS_EDIT_PASSWORD + end + def activate self.status = STATUS_ACTIVE end @@ -390,6 +395,10 @@ class User < Owner self.status = STATUS_LOCKED end + def need_edit_password + self.status = STATUS_EDIT_PASSWORD + end + def activate! update_attribute(:status, STATUS_ACTIVE) end @@ -402,6 +411,10 @@ class User < Owner update_attribute(:status, STATUS_LOCKED) end + def need_edit_password! + update_attribute(:status, STATUS_LOCKED) + end + # 课程用户身份 def course_identity(course) if !logged? diff --git a/app/services/projects/fork_service.rb b/app/services/projects/fork_service.rb index 3204e5fc..8ae787c5 100644 --- a/app/services/projects/fork_service.rb +++ b/app/services/projects/fork_service.rb @@ -24,6 +24,8 @@ class Projects::ForkService < ApplicationService new_repository.identifier = @project.identifier new_repository.save! + ProjectUnit.init_types(clone_project.id) + result = Gitea::Repository::ForkService.new(@project.owner, @target_owner, @project.identifier, @organization).call @project.update_column('forked_count', @project&.forked_count.to_i + 1) diff --git a/app/views/users/get_user_info.json.jbuilder b/app/views/users/get_user_info.json.jbuilder index d9aa4402..be11d6c0 100644 --- a/app/views/users/get_user_info.json.jbuilder +++ b/app/views/users/get_user_info.json.jbuilder @@ -8,6 +8,7 @@ json.is_teacher @user.user_extension&.teacher? json.user_identity @user.identity json.tidding_count 0 json.user_phone_binded @user.phone.present? +json.need_edit_password @user.need_edit_password? # json.phone @user.phone # json.email @user.mail json.profile_completed @user.profile_completed? From fba58800a788d1a1d2098434381eeaacec331fc5 Mon Sep 17 00:00:00 2001 From: "vilet.yy" Date: Fri, 2 Apr 2021 18:08:36 +0800 Subject: [PATCH 05/20] fix --- app/controllers/application_controller.rb | 3 ++ app/controllers/concerns/register_helper.rb | 32 ++++++++++++++++-- app/controllers/oauth/educoder_controller.rb | 1 + app/models/token.rb | 34 ++++++++++---------- app/models/user.rb | 16 ++++----- app/views/users/get_user_info.json.jbuilder | 4 +-- 6 files changed, 60 insertions(+), 30 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 14892ce7..71c50fed 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -357,7 +357,10 @@ class ApplicationController < ActionController::Base uid_logger("user setup start: session[:user_id] is #{session[:user_id]}") uid_logger("0000000000000user setup start: default_yun_session is #{default_yun_session}, session[:current_user_id] is #{session[:"#{default_yun_session}"]}") current_domain_session = session[:"#{default_yun_session}"] + Rails.logger.info "#{session[:user_id]}===============" + if current_domain_session + Rails.logger.info "#{current_domain_session}===============" # existing session User.current = (User.active.find(current_domain_session) rescue nil) elsif autologin_user = try_to_autologin diff --git a/app/controllers/concerns/register_helper.rb b/app/controllers/concerns/register_helper.rb index f4087290..35c1adea 100644 --- a/app/controllers/concerns/register_helper.rb +++ b/app/controllers/concerns/register_helper.rb @@ -1,14 +1,14 @@ module RegisterHelper extend ActiveSupport::Concern - def autologin_register(username, email, password, platform= 'forge', need_edit_password = false) + def autologin_register(username, email, password, platform= 'forge', need_edit_info = false) result = {message: nil, user: nil} user = User.new(admin: false, login: username, mail: email, type: "User") user.password = password user.platform = platform - if need_edit_password - user.need_edit_password + if need_edit_info + user.need_edit_info else user.activate end @@ -31,4 +31,30 @@ module RegisterHelper result end + def autosync_register_trustie(username, password, email) + config = Rails.application.config_for(:configuration).symbolize_keys! + + api_host = config[:sync_url] + + return if api_host.blank? + + url = "#{api_host}/api/v1/users" + sync_json = { + "mail": email, + "password": password, + "login": username + } + uri = URI.parse(url) + + if api_host + http = Net::HTTP.new(uri.hostname, uri.port) + + if api_host.include?("https://") + http.use_ssl = true + end + + http.send_request('POST', uri.path, sync_json.to_json, {'Content-Type' => 'application/json'}) + end + end + end diff --git a/app/controllers/oauth/educoder_controller.rb b/app/controllers/oauth/educoder_controller.rb index 51b0e7a8..9ca4ae49 100644 --- a/app/controllers/oauth/educoder_controller.rb +++ b/app/controllers/oauth/educoder_controller.rb @@ -56,6 +56,7 @@ class Oauth::EducoderController < Oauth::BaseController reg_result = autologin_register(login,"#{login}@forge.com", "Ec#{login}2021#", 'educoder', true) if reg_result[:message].blank? open_user = OpenUsers::Educoder.create!(user_id: reg_result[:user][:id], uid: result['login'], extra: result) + autosync_register_trustie(login, "Ec#{login}2021#", "#{login}@forge.com") successful_authentication(open_user.user) else render_error(reg_result[:message]) diff --git a/app/models/token.rb b/app/models/token.rb index c71a860a..db778c6b 100644 --- a/app/models/token.rb +++ b/app/models/token.rb @@ -1,19 +1,19 @@ -# == Schema Information -# -# Table name: tokens -# -# id :integer not null, primary key -# user_id :integer default("0"), not null -# action :string(30) default(""), not null -# value :string(40) default(""), not null -# created_on :datetime not null -# -# Indexes -# -# index_tokens_on_user_id (user_id) -# tokens_value (value) UNIQUE -# - +# == Schema Information +# +# Table name: tokens +# +# id :integer not null, primary key +# user_id :integer default("0"), not null +# action :string(30) default(""), not null +# value :string(40) default(""), not null +# created_on :datetime not null +# +# Indexes +# +# index_tokens_on_user_id (user_id) +# tokens_value (value) UNIQUE +# + # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License @@ -76,7 +76,7 @@ class Token < ActiveRecord::Base # Returns the active user who owns the key for the given action def self.find_active_user(action, key, validity_days=nil) user = find_user(action, key, validity_days) - if user && user.active? + if user && (user.active? || user.need_edit_info?) user end end diff --git a/app/models/user.rb b/app/models/user.rb index 5d03498c..5559da08 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -79,7 +79,7 @@ class User < Owner STATUS_ACTIVE = 1 STATUS_REGISTERED = 2 STATUS_LOCKED = 3 - STATUS_EDIT_PASSWORD = 4 + STATUS_EDIT_INFO = 4 # tpi tpm权限控制 EDU_ADMIN = 1 # 超级管理员 @@ -162,7 +162,7 @@ class User < Owner has_many :organizations, through: :organization_users # Groups and active users - scope :active, lambda { where(status: [STATUS_ACTIVE, STATUS_EDIT_PASSWORD]) } + scope :active, lambda { where(status: [STATUS_ACTIVE, STATUS_EDIT_INFO]) } scope :like, lambda { |keywords| where("LOWER(concat(lastname, firstname, login, mail)) LIKE ?", "%#{keywords.split(" ").join('|')}%") unless keywords.blank? } @@ -379,8 +379,8 @@ class User < Owner status == STATUS_LOCKED end - def need_edit_password? - status == STATUS_EDIT_PASSWORD + def need_edit_info? + status == STATUS_EDIT_INFO end def activate @@ -395,8 +395,8 @@ class User < Owner self.status = STATUS_LOCKED end - def need_edit_password - self.status = STATUS_EDIT_PASSWORD + def need_edit_info + self.status = STATUS_EDIT_INFO end def activate! @@ -411,8 +411,8 @@ class User < Owner update_attribute(:status, STATUS_LOCKED) end - def need_edit_password! - update_attribute(:status, STATUS_LOCKED) + def need_edit_info! + update_attribute(:status, STATUS_EDIT_INFO) end # 课程用户身份 diff --git a/app/views/users/get_user_info.json.jbuilder b/app/views/users/get_user_info.json.jbuilder index be11d6c0..908801da 100644 --- a/app/views/users/get_user_info.json.jbuilder +++ b/app/views/users/get_user_info.json.jbuilder @@ -8,9 +8,9 @@ json.is_teacher @user.user_extension&.teacher? json.user_identity @user.identity json.tidding_count 0 json.user_phone_binded @user.phone.present? -json.need_edit_password @user.need_edit_password? +json.need_edit_info @user.need_edit_info? # json.phone @user.phone -# json.email @user.mail +json.email @user.mail json.profile_completed @user.profile_completed? json.professional_certification @user.professional_certification json.devops_step @user.devops_step From 91f6dae56afa65ea815c3b0232370bf703ed913c Mon Sep 17 00:00:00 2001 From: "vilet.yy" Date: Fri, 2 Apr 2021 18:24:20 +0800 Subject: [PATCH 06/20] fix --- app/controllers/users_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index ca0988ea..1fd479c1 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -246,7 +246,7 @@ class UsersController < ApplicationController interactor = Gitea::User::UpdateInteractor.call(user.login, sync_params) if interactor.success? - user.update!(password: params[:password], mail: params[:email], status: User::STATUS_EDIT_INFO) + user.update!(password: params[:password], mail: params[:email], status: User::STATUS_ACTIVE) render_ok else render_error(interactor.error) From 80ce40e49203ea879b8353d20c58928355a63873 Mon Sep 17 00:00:00 2001 From: "vilet.yy" Date: Fri, 2 Apr 2021 18:33:31 +0800 Subject: [PATCH 07/20] fix --- app/controllers/concerns/register_helper.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/concerns/register_helper.rb b/app/controllers/concerns/register_helper.rb index 35c1adea..d77a3358 100644 --- a/app/controllers/concerns/register_helper.rb +++ b/app/controllers/concerns/register_helper.rb @@ -38,7 +38,7 @@ module RegisterHelper return if api_host.blank? - url = "#{api_host}/api/v1/users" + url = "#{api_host}/api/v1/users/common" sync_json = { "mail": email, "password": password, From 1d832a172302f0b4d99935641641aaad005acc08 Mon Sep 17 00:00:00 2001 From: "vilet.yy" Date: Fri, 2 Apr 2021 18:38:08 +0800 Subject: [PATCH 08/20] fix --- app/controllers/application_controller.rb | 3 --- 1 file changed, 3 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 71c50fed..14892ce7 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -357,10 +357,7 @@ class ApplicationController < ActionController::Base uid_logger("user setup start: session[:user_id] is #{session[:user_id]}") uid_logger("0000000000000user setup start: default_yun_session is #{default_yun_session}, session[:current_user_id] is #{session[:"#{default_yun_session}"]}") current_domain_session = session[:"#{default_yun_session}"] - Rails.logger.info "#{session[:user_id]}===============" - if current_domain_session - Rails.logger.info "#{current_domain_session}===============" # existing session User.current = (User.active.find(current_domain_session) rescue nil) elsif autologin_user = try_to_autologin From 786629dbff67bb59bfde3d6c5454bc76f82fe706 Mon Sep 17 00:00:00 2001 From: "vilet.yy" Date: Fri, 2 Apr 2021 18:41:48 +0800 Subject: [PATCH 09/20] fix --- app/services/projects/fork_service.rb | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/services/projects/fork_service.rb b/app/services/projects/fork_service.rb index 8ae787c5..3204e5fc 100644 --- a/app/services/projects/fork_service.rb +++ b/app/services/projects/fork_service.rb @@ -24,8 +24,6 @@ class Projects::ForkService < ApplicationService new_repository.identifier = @project.identifier new_repository.save! - ProjectUnit.init_types(clone_project.id) - result = Gitea::Repository::ForkService.new(@project.owner, @target_owner, @project.identifier, @organization).call @project.update_column('forked_count', @project&.forked_count.to_i + 1) From 5752f19b2f9f2f0f99338b8608b5930fa5d76e1a Mon Sep 17 00:00:00 2001 From: jasder Date: Fri, 2 Apr 2021 18:56:44 +0800 Subject: [PATCH 10/20] FIX gug --- app/controllers/users_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index d32aa66d..806bab7c 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -242,7 +242,7 @@ class UsersController < ApplicationController password: params[:password] } - Users::UpdateInfoForm.new(sync_params).validate! + Users::UpdateInfoForm.new(sync_params.merge(login: params[:login])).validate! interactor = Gitea::User::UpdateInteractor.call(user.login, sync_params) if interactor.success? From 2282c52efbe19b416a72b55124e0e80a7b8a655c Mon Sep 17 00:00:00 2001 From: jasder Date: Fri, 23 Apr 2021 17:32:45 +0800 Subject: [PATCH 11/20] FIX update README.md --- README.md | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 2a607e2a..1bcd05cc 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ Trustie (确实)是一个以大众化协同开发、开放式资源共享、 * Redis 5+ -* NodeJS > 13.0.0 +* imagemagick ### Steps @@ -65,7 +65,7 @@ default: &default **因目前gitea平台api受限,暂时推荐从forge平台获取gitea部署文件进行部署:https://forgeplus.trustie.net/projects/Trustie/gitea-binary** -#### 配置gitea服务步骤 +**配置gitea服务步骤** 1. 部署gitea服务,并注册root账户 2. 修改forge平台的 config/configuration.yml中的gitea服务指向地址,如: @@ -80,60 +80,64 @@ gitea: #### 6. 安装redis环境 **请自行搜索各平台如何安装部署redis环境** +#### 7. 安装imagemagick插件 +- Mac OS X +```bash + brew install imagemagick ghostscript +``` -#### 7. 创建数据库 +- Linux +```bash +sudo apt-get install -y imagemagick +``` + +#### 8. 创建数据库 **开发环境为development, 生成环境为production** ```bash rails db:create RAILS_ENV=development ``` -#### 8. 导入数据表结构 +#### 9. 导入数据表结构 ```bash bundle exec rake sync_table_structure:import_csv ``` -#### 9. 执行migrate迁移文件 +#### 10. 执行migrate迁移文件 **开发环境为development, 生成环境为production** ```bash rails db:migrate RAILS_ENV=development ``` -#### 10. clone前端代码 +#### 11. clone前端代码 **将前端代码克隆到public/react目录下,目录结构应该是: public/react/build** ```bash git clone -b standalone https://git.trustie.net/jasder/build.git ``` -#### 11. 启动redis(此处已mac系统为例) +#### 12. 启动redis(此处已mac系统为例) ```bash redis-server& ``` -#### 12. 启动sidekiq +#### 13. 启动sidekiq **开发环境为development, 生成环境为production** ```bash bundle exec sidekiq -C config/sidekiq.yml -e production -d ``` -#### 13. 启动rails服务 +#### 14. 启动rails服务 ```bash rails s ``` -#### 14. 浏览器访问 -在浏览器中输入如下地址访问: -```bash -http://localhost:3000/ -``` - #### 15. 浏览器访问 在浏览器中输入如下地址访问: ```bash http://localhost:3000/ ``` -#### 15. 其他说明 +#### 16. 其他说明 通过页面注册都第一个用户为平台管理员用户 ## 页面展示 From 4023b8980ee038d3db4f887fce3c4539d142f906 Mon Sep 17 00:00:00 2001 From: jasder Date: Wed, 12 May 2021 17:01:30 +0800 Subject: [PATCH 12/20] =?UTF-8?q?FIX=20=E5=AE=8C=E5=96=84=E9=80=9A?= =?UTF-8?q?=E8=BF=87=E5=A4=A7=E8=B5=9B=E7=82=B9=E5=87=BB=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E9=93=BE=E6=8E=A5=E8=87=AA=E5=8A=A8=E6=B3=A8=E5=86=8C=E5=85=B3?= =?UTF-8?q?=E8=81=94Educoder=E5=B9=B3=E5=8F=B0=E8=B4=A6=E5=8F=B7=E7=9A=84?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/concerns/register_helper.rb | 7 ++++--- app/controllers/oauth_controller.rb | 3 +++ app/views/oauth/register.html.erb | 18 +++++++++++++++--- 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/app/controllers/concerns/register_helper.rb b/app/controllers/concerns/register_helper.rb index d77a3358..9d2f420a 100644 --- a/app/controllers/concerns/register_helper.rb +++ b/app/controllers/concerns/register_helper.rb @@ -31,7 +31,7 @@ module RegisterHelper result end - def autosync_register_trustie(username, password, email) + def autosync_register_trustie(username, password, email, lastname="") config = Rails.application.config_for(:configuration).symbolize_keys! api_host = config[:sync_url] @@ -42,8 +42,9 @@ module RegisterHelper sync_json = { "mail": email, "password": password, - "login": username - } + "login": username, + "lastname": lastname + }.compact uri = URI.parse(url) if api_host diff --git a/app/controllers/oauth_controller.rb b/app/controllers/oauth_controller.rb index 5da9297a..cf43dbe6 100644 --- a/app/controllers/oauth_controller.rb +++ b/app/controllers/oauth_controller.rb @@ -61,6 +61,7 @@ class OauthController < ApplicationController login = params[:login] email = params[:mail] password = params[:password] + lastname = params[:lastname] callback_url = params[:callback_url] platform = params[:plathform] || 'educoder' @@ -72,7 +73,9 @@ class OauthController < ApplicationController if result[:message].blank? logger.info "[Oauth educoer] ====auto_register success" user = User.find result[:user][:id] + user.update_column(:lastname, params[:lastname]) successful_authentication(user) + autosync_register_trustie(login, password, email, lastname) OpenUsers::Educoder.create!(user: user, uid: user.login) render json: { callback_url: callback_url } diff --git a/app/views/oauth/register.html.erb b/app/views/oauth/register.html.erb index 96778fa0..391f0466 100644 --- a/app/views/oauth/register.html.erb +++ b/app/views/oauth/register.html.erb @@ -5,10 +5,15 @@ <%= form_tag('', method: :post, id: 'oauth_form', class: 'form-inline search-form flex-1', remote: true) do %> <%= hidden_field_tag 'callback_url', params[:callback_url] %>
- 用户名: - <%= text_field_tag :login, params[:login], placeholder: '请输入用户名', readonly: true, id: 'login' %> + 登录名: + <%= text_field_tag :login, params[:login], placeholder: '请输入登录名', readonly: true, id: 'login' %>

+
+ 用户名称: + <%= text_field_tag :lastname, params[:lastname], placeholder: '登录平台后显示的用户名称', readonly: true, id: 'lastname' %> +

+
邮箱: <%= text_field_tag :mail, params[:mail], placeholder: '请输入绑定邮箱', maxlength: 40, id: 'email' %> @@ -16,7 +21,7 @@
密码: - <%= password_field_tag :password, '', placeholder: '请输入账号密码', id: 'password' %> + <%= password_field_tag :password, '', placeholder: '输入EduCoder账号密码或新的密码', id: 'password' %>

@@ -29,6 +34,7 @@ function submitdata(){ var login = $("#login").val(); var email = $("#email").val(); + var lastname = $("#lastname").val(); var password = $("#password").val(); if(!login){ @@ -37,6 +43,12 @@ }else{ $(".loginCheck span").html(""); } + if(!lastname){ + $(".lastnameCheck span").html("请输入用户名称"); + return; + }else{ + $(".lastnameCheck span").html(""); + } if(!email){ $(".emailCheck span").html("请输入绑定的邮箱"); return; From 91bbb58d4f81cf2ff89acad83bdefe5c2a225d83 Mon Sep 17 00:00:00 2001 From: jasder Date: Wed, 12 May 2021 17:44:45 +0800 Subject: [PATCH 13/20] FIX delete input readonly --- app/views/oauth/register.html.erb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/views/oauth/register.html.erb b/app/views/oauth/register.html.erb index 391f0466..e745d949 100644 --- a/app/views/oauth/register.html.erb +++ b/app/views/oauth/register.html.erb @@ -11,7 +11,7 @@
用户名称: - <%= text_field_tag :lastname, params[:lastname], placeholder: '登录平台后显示的用户名称', readonly: true, id: 'lastname' %> + <%= text_field_tag :lastname, params[:lastname], placeholder: '登录平台后显示的用户名称', maxlength: 40, id: 'lastname' %>

@@ -21,7 +21,7 @@
密码: - <%= password_field_tag :password, '', placeholder: '输入EduCoder账号密码或新的密码', id: 'password' %> + <%= password_field_tag :password, '', placeholder: '输入EduCoder账号密码或新的密码',maxlength: 15, id: 'password' %>

From b568ac4e973250dd2cebf114f35722b1e97110d0 Mon Sep 17 00:00:00 2001 From: jasder Date: Wed, 12 May 2021 17:48:05 +0800 Subject: [PATCH 14/20] ADD title --- app/views/oauth/register.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/oauth/register.html.erb b/app/views/oauth/register.html.erb index e745d949..372b2b04 100644 --- a/app/views/oauth/register.html.erb +++ b/app/views/oauth/register.html.erb @@ -1,5 +1,5 @@
-

完善信息,进入比赛

+

平台已检测到您的如下信息,完善即可进入比赛

<%= form_tag('', method: :post, id: 'oauth_form', class: 'form-inline search-form flex-1', remote: true) do %> From 84927c2361e6fc57757a5acd94ab414357e90e49 Mon Sep 17 00:00:00 2001 From: jasder Date: Thu, 13 May 2021 11:47:47 +0800 Subject: [PATCH 15/20] =?UTF-8?q?FIX=20=E8=A7=A3=E5=86=B3=E5=A4=A7?= =?UTF-8?q?=E8=B5=9B=E4=B8=AD=E7=82=B9=E5=87=BB=E9=A1=B9=E7=9B=AE=E8=B7=B3?= =?UTF-8?q?=E8=BD=AC=E5=88=B0forge=E5=B9=B3=E5=8F=B0=EF=BC=8C=E4=BF=9D?= =?UTF-8?q?=E6=8C=81=E8=87=AA=E5=8A=A8=E7=99=BB=E9=99=86=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/oauth_controller.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/controllers/oauth_controller.rb b/app/controllers/oauth_controller.rb index cf43dbe6..f2ca2cc2 100644 --- a/app/controllers/oauth_controller.rb +++ b/app/controllers/oauth_controller.rb @@ -74,9 +74,10 @@ class OauthController < ApplicationController logger.info "[Oauth educoer] ====auto_register success" user = User.find result[:user][:id] user.update_column(:lastname, params[:lastname]) - successful_authentication(user) autosync_register_trustie(login, password, email, lastname) + OpenUsers::Educoder.create!(user: user, uid: user.login) + successful_authentication(user) render json: { callback_url: callback_url } # redirect_to callback_url From 3a475a4674a702422651298d7a850e0f63af6314 Mon Sep 17 00:00:00 2001 From: jasder Date: Mon, 28 Jun 2021 09:59:47 +0800 Subject: [PATCH 16/20] FIX get conflict files bug with create pr api --- app/controllers/pull_requests_controller.rb | 2 +- app/controllers/repositories_controller.rb | 2 +- app/models/pull_request.rb | 6 ++++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/app/controllers/pull_requests_controller.rb b/app/controllers/pull_requests_controller.rb index 3d9f32a2..987bb156 100644 --- a/app/controllers/pull_requests_controller.rb +++ b/app/controllers/pull_requests_controller.rb @@ -56,7 +56,7 @@ class PullRequestsController < ApplicationController ActiveRecord::Base.transaction do @pull_request, @gitea_pull_request = PullRequests::CreateService.call(current_user, @owner, @project, params) if @gitea_pull_request[:status] == :success - @pull_request.bind_gitea_pull_request!(@gitea_pull_request[:body]["number"]) + @pull_request.bind_gitea_pull_request!(@gitea_pull_request[:body]["number"], @gitea_pull_request[:body]["id"]) render_ok else render_error("create pull request error: #{@gitea_pull_request[:status]}") diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index 062a8f04..f375b636 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -316,7 +316,7 @@ class RepositoriesController < ApplicationController local_requests = PullRequest.new(local_params.merge(user_id: current_user.try(:id), project_id: @project.id, issue_id: @pull_issue.id)) if local_requests.save gitea_request = Gitea::PullRequest::CreateService.new(current_user.try(:gitea_token), @owner.login, @project.try(:identifier), requests_params).call - if gitea_request[:status] == :success && local_requests.update_attributes(gpid: gitea_request["body"]["number"]) + if gitea_request[:status] == :success && local_requests.update_attributes(gitea_number: gitea_request["body"]["number"]) local_requests.project_trends.create(user_id: current_user.id, project_id: @project.id, action_type: "create") end end diff --git a/app/models/pull_request.rb b/app/models/pull_request.rb index 5c9004a0..ce0cb04a 100644 --- a/app/models/pull_request.rb +++ b/app/models/pull_request.rb @@ -54,8 +54,10 @@ class PullRequest < ApplicationRecord Project.find_by(id: self.fork_project_id) end - def bind_gitea_pull_request!(gitea_pull_number) - update_column(:gitea_number, gitea_pull_number) + def bind_gitea_pull_request!(gitea_pull_number, gitea_pull_id) + update_columns( + gitea_number: gitea_pull_number, + gitea_id: gitea_pull_id) end def merge! From 01341d4389a6574371e54789107f5f65048c3ce3 Mon Sep 17 00:00:00 2001 From: jasder Date: Mon, 28 Jun 2021 10:04:48 +0800 Subject: [PATCH 17/20] =?UTF-8?q?FIX=20pull=E3=80=81=20gitea=20pull=20mode?= =?UTF-8?q?l=20relation=20bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/gitea/pull.rb | 2 +- app/models/pull_request.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/models/gitea/pull.rb b/app/models/gitea/pull.rb index 591e36c4..7adb8c36 100644 --- a/app/models/gitea/pull.rb +++ b/app/models/gitea/pull.rb @@ -39,6 +39,6 @@ class Gitea::Pull < Gitea::Base serialize :conflicted_files, Array - belongs_to :pull_request, class_name: '::PullRequest', foreign_key: :id, primary_key: :gitea_number, optional: true + belongs_to :pull_request, class_name: '::PullRequest', foreign_key: :id, primary_key: :gitea_id, optional: true end diff --git a/app/models/pull_request.rb b/app/models/pull_request.rb index ce0cb04a..aec32085 100644 --- a/app/models/pull_request.rb +++ b/app/models/pull_request.rb @@ -37,7 +37,7 @@ class PullRequest < ApplicationRecord has_many :pull_request_tags, foreign_key: :pull_request_id has_many :project_trends, as: :trend, dependent: :destroy has_many :attachments, as: :container, dependent: :destroy - has_one :gitea_pull, foreign_key: :id, primary_key: :gitea_number, class_name: 'Gitea::Pull' + has_one :gitea_pull, foreign_key: :id, primary_key: :gitea_id, class_name: 'Gitea::Pull' scope :merged_and_closed, ->{where.not(status: 0)} scope :opening, -> {where(status: 0)} From 259090b8e31a336c32e502467ac2a628ed66cdf6 Mon Sep 17 00:00:00 2001 From: viletyy Date: Mon, 28 Jun 2021 21:07:10 +0800 Subject: [PATCH 18/20] fix --- app/models/concerns/project_operable.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/concerns/project_operable.rb b/app/models/concerns/project_operable.rb index a228a702..a6dc0dd3 100644 --- a/app/models/concerns/project_operable.rb +++ b/app/models/concerns/project_operable.rb @@ -65,7 +65,7 @@ module ProjectOperable if owner.is_a?(User) managers.exists?(user_id: user.id) elsif owner.is_a?(Organization) - managers.exists?(user_id: user.id) || owner.is_only_admin?(user.id) + managers.exists?(user_id: user.id) || owner.is_owner?(user.id) || owner.is_only_admin?(user.id) else false end From ff21916f182d185c40ccf9e6cd2d9981c20f09e0 Mon Sep 17 00:00:00 2001 From: viletyy Date: Fri, 9 Jul 2021 13:48:48 +0800 Subject: [PATCH 19/20] fix: merge from develop --- app/models/project.rb | 85 +------------------------------------------ 1 file changed, 2 insertions(+), 83 deletions(-) diff --git a/app/models/project.rb b/app/models/project.rb index 14810b71..6fc1f1db 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -1,82 +1,3 @@ -<<<<<<< HEAD -# == Schema Information -# -# Table name: projects -# -# id :integer not null, primary key -# name :string(255) default(""), not null -# description :text(4294967295) -# homepage :string(255) default("") -# is_public :boolean default("1"), not null -# parent_id :integer -# created_on :datetime -# updated_on :datetime -# identifier :string(255) -# status :integer default("1"), not null -# lft :integer -# rgt :integer -# inherit_members :boolean default("0"), not null -# project_type :integer default("0") -# hidden_repo :boolean default("0"), not null -# attachmenttype :integer default("1") -# user_id :integer -# dts_test :integer default("0") -# enterprise_name :string(255) -# organization_id :integer -# project_new_type :integer -# gpid :integer -# forked_from_project_id :integer -# forked_count :integer default("0") -# publish_resource :integer default("0") -# visits :integer default("0") -# hot :integer default("0") -# invite_code :string(255) -# qrcode :string(255) -# qrcode_expiretime :integer default("0") -# script :text(65535) -# training_status :integer default("0") -# rep_identifier :string(255) -# project_category_id :integer -# project_language_id :integer -# praises_count :integer default("0") -# watchers_count :integer default("0") -# issues_count :integer default("0") -# pull_requests_count :integer default("0") -# language :string(255) -# versions_count :integer default("0") -# issue_tags_count :integer default("0") -# closed_issues_count :integer default("0") -# open_devops :boolean default("0") -# gitea_webhook_id :integer -# open_devops_count :integer default("0") -# recommend :boolean default("0") -# platform :integer default("0") -# license_id :integer -# ignore_id :integer -# default_branch :string(255) default("master") -# website :string(255) -# lesson_url :string(255) -# -# Indexes -# -# index_projects_on_forked_from_project_id (forked_from_project_id) -# index_projects_on_identifier (identifier) -# index_projects_on_invite_code (invite_code) -# index_projects_on_is_public (is_public) -# index_projects_on_lft (lft) -# index_projects_on_license_id (license_id) -# index_projects_on_name (name) -# index_projects_on_platform (platform) -# index_projects_on_project_category_id (project_category_id) -# index_projects_on_project_language_id (project_language_id) -# index_projects_on_project_type (project_type) -# index_projects_on_recommend (recommend) -# index_projects_on_rgt (rgt) -# index_projects_on_status (status) -# index_projects_on_updated_on (updated_on) -# - -======= # == Schema Information # # Table name: projects @@ -116,8 +37,6 @@ # rep_identifier :string(255) # project_category_id :integer # project_language_id :integer -# license_id :integer -# ignore_id :integer # praises_count :integer default("0") # watchers_count :integer default("0") # issues_count :integer default("0") @@ -131,9 +50,10 @@ # open_devops_count :integer default("0") # recommend :boolean default("0") # platform :integer default("0") +# license_id :integer +# ignore_id :integer # default_branch :string(255) default("master") # website :string(255) -# order_index :integer default("0") # lesson_url :string(255) # # Indexes @@ -155,7 +75,6 @@ # index_projects_on_updated_on (updated_on) # ->>>>>>> develop From 55a0bcfb82a49fd8351f9379e8d587ec4c7ab5b8 Mon Sep 17 00:00:00 2001 From: viletyy Date: Mon, 12 Jul 2021 17:33:10 +0800 Subject: [PATCH 20/20] fix --- app/models/project.rb | 8 -------- 1 file changed, 8 deletions(-) diff --git a/app/models/project.rb b/app/models/project.rb index fc78de65..a47ee423 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -1,7 +1,3 @@ -<<<<<<< HEAD -======= - ->>>>>>> develop # == Schema Information # # Table name: projects @@ -79,10 +75,6 @@ # index_projects_on_updated_on (updated_on) # -<<<<<<< HEAD -======= - ->>>>>>> develop class Project < ApplicationRecord include Matchable