diff --git a/api_document.md b/api_document.md index cad8be7ad..424086b5b 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 000000000..b140130e9 --- /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 c2bb0c0f3..0b2fdc9c2 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 000000000..48936b3f9 --- /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 000000000..ccb037e10 --- /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 2d8861416..28dc86df8 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