From 50d81b2490b51ab86bed271bf09fe4094a5d3564 Mon Sep 17 00:00:00 2001 From: jasder Date: Tue, 9 Feb 2021 11:49:47 +0800 Subject: [PATCH 1/8] FIX schema --- app/models/laboratory.rb | 5 -- app/models/laboratory_setting.rb | 4 - app/models/project.rb | 139 ++++++++++++++++--------------- 3 files changed, 70 insertions(+), 78 deletions(-) diff --git a/app/models/laboratory.rb b/app/models/laboratory.rb index 699800c9..73002a84 100644 --- a/app/models/laboratory.rb +++ b/app/models/laboratory.rb @@ -11,11 +11,6 @@ # sync_subject :boolean default("0") # sync_shixun :boolean default("0") # -# Indexes -# -# index_laboratories_on_identifier (identifier) UNIQUE -# index_laboratories_on_school_id (school_id) -# class Laboratory < ApplicationRecord belongs_to :school, optional: true diff --git a/app/models/laboratory_setting.rb b/app/models/laboratory_setting.rb index 61c677de..5013dd54 100644 --- a/app/models/laboratory_setting.rb +++ b/app/models/laboratory_setting.rb @@ -6,10 +6,6 @@ # laboratory_id :integer # config :text(65535) # -# Indexes -# -# index_laboratory_settings_on_laboratory_id (laboratory_id) -# class LaboratorySetting < ApplicationRecord belongs_to :laboratory diff --git a/app/models/project.rb b/app/models/project.rb index f82674db..a5beb448 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -1,72 +1,73 @@ -# == 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 -# license_id :integer -# ignore_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") -# -# Indexes -# -# index_projects_on_forked_from_project_id (forked_from_project_id) -# index_projects_on_identifier (identifier) -# index_projects_on_is_public (is_public) -# index_projects_on_lft (lft) -# index_projects_on_name (name) -# index_projects_on_platform (platform) -# 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 +# +# 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 +# license_id :integer +# ignore_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") +# +# Indexes +# +# index_projects_on_forked_from_project_id (forked_from_project_id) +# index_projects_on_identifier (identifier) +# index_projects_on_is_public (is_public) +# index_projects_on_lft (lft) +# index_projects_on_name (name) +# index_projects_on_platform (platform) +# 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) +# + class Project < ApplicationRecord From cb90dc1f514af0d5fbfc7f798037204d897a73fc Mon Sep 17 00:00:00 2001 From: victor <121183489011@qq.com> Date: Wed, 3 Mar 2021 14:58:51 +0800 Subject: [PATCH 2/8] =?UTF-8?q?=E5=8F=82=E6=95=B0=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api_document.md | 127 +++++++++++++++++++++- app/controllers/ci/secrets_controller.rb | 49 +++++++++ app/libs/ci/drone/api.rb | 20 ++++ app/views/ci/secrets/_index.json.jbuilder | 2 + app/views/ci/secrets/index.json.jbuilder | 3 + config/routes.rb | 6 + 6 files changed, 205 insertions(+), 2 deletions(-) create mode 100644 app/controllers/ci/secrets_controller.rb create mode 100644 app/views/ci/secrets/_index.json.jbuilder create mode 100644 app/views/ci/secrets/index.json.jbuilder diff --git a/api_document.md b/api_document.md index cad8be7a..424086b5 100644 --- a/api_document.md +++ b/api_document.md @@ -1,4 +1,3 @@ ---- # API文档 @@ -19,7 +18,6 @@ ### API接口 ---- #### 用户注册(通过其他平台) ``` @@ -4830,8 +4828,133 @@ curl --location --request DELETE 'http://localhost:3000/api/ci/templates/10' ------ +#### 参数列表查询 + +``` +GET /api/ci/secrets/secrets?owner={owner}&repo={repo} +``` + +*示例* + +```bash +curl --location --request GET 'http://localhost:3000/api/ci/secrets?owner=test&repo=test' +``` + +*请求参数说明:* + +| 参数名 | 必选 | 类型 | 说明 | +| ------ | ---- | ------ | ---------- | +| owner | 是 | string | 仓库所有人 | +| repo | 是 | string | 仓库名 | + +*返回参数说明:* + +| 参数名 | 类型 | 说明 | +| ------ | ------ | ------ | +| name | string | 参数名 | +| data | string | 参数值 | +| repo | string | 仓库 | + +返回值 + +```json + [ + { + "id": 1, + "name": "test", + "data": "test", + "repo": "test" + } +] + +``` + ------ +#### 参数新增/更新 + +``` +POST /api/ci/secrets?owner={owner}&repo={repo} +``` + +*示例* + +```bash +curl --location --request POST 'http://localhost:3000/api/ci/secrets?owner=test&repo=test' \ +--data-raw ' { + "name": "ip", + "data": "1.1.1.1", + "id": 21 +}' +``` + +*请求参数说明:* + +| 参数名 | 必选 | 类型 | 说明 | +| ------ | ---- | ------ | ------------ | +| owner | 是 | string | 仓库拥有者 | +| repo | 是 | string | 仓库名 | +| name | 是 | string | 参数名 | +| data | 是 | string | 参数值 | +| id | 否 | int | id,更新时传 | + +*返回参数说明:* + +| 参数名 | 类型 | 说明 | +| ------- | ------ | ------------ | +| status | int | 状态码 0成功 | +| message | string | 消息 | + +返回值 + +```json +{ + "status": 0, + "message": "success" +} +``` + +------ + +#### 参数删除 + +``` +DELETE /api/ci/secrets/{id}/{name}?owner={owner}&repo={repo} +``` + +*示例* + +```bash +curl --location --request DELETE 'http://localhost:3000/api/ci/secrets/1/p2?owner=victor&repo=trustieTest' \ +``` + +*请求参数说明:* + +| 参数名 | 必选 | 类型 | 说明 | +| ------ | ---- | ------ | ------ | +| name | 是 | string | 参数名 | +| id | 是 | int | 参数id | + +*返回参数说明:* + +| 参数名 | 类型 | 说明 | +| ------- | ------ | ------------ | +| status | int | 状态码 0成功 | +| message | string | 返回消息 | + +返回值 + +```json +{ + "status": 0, + "message": "success" +} +``` + +------ + + + #### 解除CI服务器绑定 ``` diff --git a/app/controllers/ci/secrets_controller.rb b/app/controllers/ci/secrets_controller.rb new file mode 100644 index 00000000..b140130e --- /dev/null +++ b/app/controllers/ci/secrets_controller.rb @@ -0,0 +1,49 @@ +class Ci::SecretsController < Ci::BaseController + + before_action :load_repo + + # 参数列表 + def index + cloud_account = current_user.ci_cloud_account + result = Ci::Drone::API.new(@ci_user.user_hash, cloud_account.drone_url, params[:owner], params[:repo], nil).secrets + @secrets = result + end + + #新增、更新参数 + def create + cloud_account = current_user.ci_cloud_account + options = { + name: params[:name], + data: params[:data] + } + id = params[:id] + if id + result = Ci::Drone::API.new(@ci_user.user_hash, cloud_account.drone_url, params[:owner], params[:repo], options).update_secret + if result["id"] + render_ok + else + render_error(result["message"]) + end + else + result = Ci::Drone::API.new(@ci_user.user_hash, cloud_account.drone_url, params[:owner], params[:repo], options).create_secret + if result["id"] + render_ok + else + render_error(result["message"]) + end + end + end + + #删除参数 + def destroy + name = params[:name] + if !name.blank? + cloud_account = current_user.ci_cloud_account + Ci::Drone::API.new(@ci_user.user_hash, cloud_account.drone_url, params[:owner], params[:repo], {name: name}).delete_secret + render_ok + else + render_error("参数名不能为空") + end + end + +end \ No newline at end of file diff --git a/app/libs/ci/drone/api.rb b/app/libs/ci/drone/api.rb index c2bb0c0f..0b2fdc9c 100644 --- a/app/libs/ci/drone/api.rb +++ b/app/libs/ci/drone/api.rb @@ -85,4 +85,24 @@ class Ci::Drone::API < Ci::Drone::Request post(endpoint, "/api/users", {login: options[:login], email: options[:email], avatar_url:options[:avatar_url],active:true, drone_token: options[:token]}) end + # Creates a secret. + def create_secret + post(endpoint, "/api/repos/#{owner}/#{repo}/secrets", {name: options[:name], data: options[:data], pull_request:true, drone_token: drone_token}) + end + + # Update a secret. + def update_secret + patch(endpoint, "/api/repos/#{owner}/#{repo}/secrets/#{options[:name]}", { data: options[:data], pull_request:true, drone_token: drone_token}) + end + + # list of secrets. + def secrets + get(endpoint, "/api/repos/#{owner}/#{repo}/secrets", drone_token: drone_token) + end + + # delete secret. + def delete_secret + delete(endpoint, "/api/repos/#{owner}/#{repo}/secrets/#{options[:name]}", drone_token: drone_token) + end + end diff --git a/app/views/ci/secrets/_index.json.jbuilder b/app/views/ci/secrets/_index.json.jbuilder new file mode 100644 index 00000000..48936b3f --- /dev/null +++ b/app/views/ci/secrets/_index.json.jbuilder @@ -0,0 +1,2 @@ +json.id secret['id'] +json.name secret['name'] \ No newline at end of file diff --git a/app/views/ci/secrets/index.json.jbuilder b/app/views/ci/secrets/index.json.jbuilder new file mode 100644 index 00000000..ccb037e1 --- /dev/null +++ b/app/views/ci/secrets/index.json.jbuilder @@ -0,0 +1,3 @@ +json.array! @secrets do |secret| + json.partial! "/ci/secrets/index", secret: secret +end \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index 2d886141..28dc86df 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -39,6 +39,12 @@ Rails.application.routes.draw do end end + resources :secrets do + member do + delete :destroy, :path => ":name", to: 'secrets#destroy' + end + end + resources :pipelines do collection do get :list From d7bc309d4961daa68734faa3ef7647e1bf0f036f Mon Sep 17 00:00:00 2001 From: victor <121183489011@qq.com> Date: Thu, 4 Mar 2021 09:33:04 +0800 Subject: [PATCH 3/8] =?UTF-8?q?=E5=8F=82=E6=95=B0=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E5=88=A0=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/ci/secrets_controller.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/controllers/ci/secrets_controller.rb b/app/controllers/ci/secrets_controller.rb index b140130e..4bc4196b 100644 --- a/app/controllers/ci/secrets_controller.rb +++ b/app/controllers/ci/secrets_controller.rb @@ -44,6 +44,8 @@ class Ci::SecretsController < Ci::BaseController else render_error("参数名不能为空") end + rescue Exception => ex + render_ok end end \ No newline at end of file From 61e5b9132ab6e36e96ede44ed41357244fae55b5 Mon Sep 17 00:00:00 2001 From: victor <121183489011@qq.com> Date: Thu, 4 Mar 2021 16:52:00 +0800 Subject: [PATCH 4/8] =?UTF-8?q?=E5=8F=82=E6=95=B0=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/routes.rb | 3 --- 1 file changed, 3 deletions(-) diff --git a/config/routes.rb b/config/routes.rb index 28dc86df..228c546c 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -40,9 +40,6 @@ Rails.application.routes.draw do end resources :secrets do - member do - delete :destroy, :path => ":name", to: 'secrets#destroy' - end end resources :pipelines do From 3b5d9719641780da383ab454b189b9174eed5806 Mon Sep 17 00:00:00 2001 From: victor <121183489011@qq.com> Date: Thu, 4 Mar 2021 17:00:29 +0800 Subject: [PATCH 5/8] =?UTF-8?q?=E5=8F=82=E6=95=B0=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api_document.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/api_document.md b/api_document.md index 424086b5..7620c42a 100644 --- a/api_document.md +++ b/api_document.md @@ -4919,13 +4919,13 @@ curl --location --request POST 'http://localhost:3000/api/ci/secrets?owner=test& #### 参数删除 ``` -DELETE /api/ci/secrets/{id}/{name}?owner={owner}&repo={repo} +DELETE /api/ci/secrets/{id}?name={name}&owner={owner}&repo={repo} ``` *示例* ```bash -curl --location --request DELETE 'http://localhost:3000/api/ci/secrets/1/p2?owner=victor&repo=trustieTest' \ +curl --location --request DELETE 'http://localhost:3000/api/ci/secrets/1?name=p1&owner=victor&repo=trustieTest' \ ``` *请求参数说明:* From 33984e16d0ac5590823d3cb0192fa6d5314adc76 Mon Sep 17 00:00:00 2001 From: victor <121183489011@qq.com> Date: Fri, 5 Mar 2021 15:26:29 +0800 Subject: [PATCH 6/8] =?UTF-8?q?=E5=8F=82=E6=95=B0=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/ci/secrets_controller.rb | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/app/controllers/ci/secrets_controller.rb b/app/controllers/ci/secrets_controller.rb index 4bc4196b..c7ff9989 100644 --- a/app/controllers/ci/secrets_controller.rb +++ b/app/controllers/ci/secrets_controller.rb @@ -4,28 +4,26 @@ class Ci::SecretsController < Ci::BaseController # 参数列表 def index - cloud_account = current_user.ci_cloud_account - result = Ci::Drone::API.new(@ci_user.user_hash, cloud_account.drone_url, params[:owner], params[:repo], nil).secrets + result = Ci::Drone::API.new(@ci_user.user_hash, ci_drone_url, params[:owner], params[:repo], nil).secrets @secrets = result end #新增、更新参数 def create - cloud_account = current_user.ci_cloud_account options = { name: params[:name], data: params[:data] } id = params[:id] if id - result = Ci::Drone::API.new(@ci_user.user_hash, cloud_account.drone_url, params[:owner], params[:repo], options).update_secret + result = Ci::Drone::API.new(@ci_user.user_hash, ci_drone_url, params[:owner], params[:repo], options).update_secret if result["id"] render_ok else render_error(result["message"]) end else - result = Ci::Drone::API.new(@ci_user.user_hash, cloud_account.drone_url, params[:owner], params[:repo], options).create_secret + result = Ci::Drone::API.new(@ci_user.user_hash, ci_drone_url, params[:owner], params[:repo], options).create_secret if result["id"] render_ok else @@ -38,8 +36,7 @@ class Ci::SecretsController < Ci::BaseController def destroy name = params[:name] if !name.blank? - cloud_account = current_user.ci_cloud_account - Ci::Drone::API.new(@ci_user.user_hash, cloud_account.drone_url, params[:owner], params[:repo], {name: name}).delete_secret + Ci::Drone::API.new(@ci_user.user_hash, ci_drone_url, params[:owner], params[:repo], {name: name}).delete_secret render_ok else render_error("参数名不能为空") @@ -48,4 +45,9 @@ class Ci::SecretsController < Ci::BaseController render_ok end + def ci_drone_url + ci_user = Ci::CloudAccount.find_by(account: params[:owner]) + ci_user&.drone_url + end + end \ No newline at end of file From 50928f82c0b93c3801a6b6c95a3c18fb5a752523 Mon Sep 17 00:00:00 2001 From: jasder Date: Fri, 5 Mar 2021 15:36:26 +0800 Subject: [PATCH 7/8] FIX valid user before register action --- app/controllers/concerns/register_helper.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/controllers/concerns/register_helper.rb b/app/controllers/concerns/register_helper.rb index f18f40df..3a23a210 100644 --- a/app/controllers/concerns/register_helper.rb +++ b/app/controllers/concerns/register_helper.rb @@ -8,6 +8,8 @@ module RegisterHelper user.password = password user.platform = platform user.activate + + return unless user.valid? interactor = Gitea::RegisterInteractor.call({username: username, email: email, password: password}) if interactor.success? From d3df04fb977d6b4f9e5bf8e60f8658548535d6f7 Mon Sep 17 00:00:00 2001 From: victor <121183489011@qq.com> Date: Fri, 5 Mar 2021 15:43:42 +0800 Subject: [PATCH 8/8] =?UTF-8?q?=E5=8F=82=E6=95=B0=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/ci/secrets_controller.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/ci/secrets_controller.rb b/app/controllers/ci/secrets_controller.rb index c7ff9989..698e7bbe 100644 --- a/app/controllers/ci/secrets_controller.rb +++ b/app/controllers/ci/secrets_controller.rb @@ -46,8 +46,8 @@ class Ci::SecretsController < Ci::BaseController end def ci_drone_url - ci_user = Ci::CloudAccount.find_by(account: params[:owner]) - ci_user&.drone_url + user = User.find_by(login: params[:owner]) + user&.ci_cloud_account.drone_url end end \ No newline at end of file