diff --git a/doc/zh/api/README.md b/doc/zh/api/README.md index 701f35131..da3273ca0 100644 --- a/doc/zh/api/README.md +++ b/doc/zh/api/README.md @@ -12,7 +12,7 @@ ```json { - "Authorization": "当前user的token" + "Authorization": "Token 当前user的token" } ``` @@ -37,7 +37,7 @@ import requests # 获取helloworld团队下的hellotca项目下登记的代码库 url="http://tca.com/server/main/api/orgs/helloworld/teams/hellotca/repos/?limit=12&offset=0" headers = { - "Authorization": token, + "Authorization": "Token %s" % token, } response = requests.get(url, headers=headers) @@ -115,3 +115,17 @@ print(response.json()) 平台返回的数据分页格式是使用`limit`和`offset`参数进行分页处理 比如:`server/main/api/orgs//teams/?limit=12&offset=12`获取得到的数据是从第 13 条开始获取 + +## 响应格式 + +平台返回的响应格式如下: + + +```JSON +{ + "data": {...}, # 详细数据 + "code": 0, # 请求结果码,为0表示正常 + "msg": "xxx" , # 请求结果信息 + "status_code": 200 # 请求响应码 +} +``` \ No newline at end of file diff --git "a/doc/zh/api/\347\273\223\346\236\234\346\246\202\350\247\210\346\250\241\345\235\227\346\216\245\345\217\243.md" "b/doc/zh/api/\347\273\223\346\236\234\346\246\202\350\247\210\346\250\241\345\235\227\346\216\245\345\217\243.md" index 089b93059..bcbbfe638 100644 --- "a/doc/zh/api/\347\273\223\346\236\234\346\246\202\350\247\210\346\250\241\345\235\227\346\216\245\345\217\243.md" +++ "b/doc/zh/api/\347\273\223\346\236\234\346\246\202\350\247\210\346\250\241\345\235\227\346\216\245\345\217\243.md" @@ -8,260 +8,265 @@ GET /server/analysis/api/orgs//teams//repos//projec #### 返回结果 ```JSON { - "lintscan": { - "issue_open_num": 74, - "issue_fix_num": 439, - "issue_detail_num": 310, - "scan": { - "id": 1, - "scan_time": "2021-03-11T20:46:44.171607+08:00", - "execute_time": "00:02:17.844712" - }, - "current_scan": { - "active_category_detail": { - "convention": 70, - "other": 4 - }, - "active_severity_detail": { - "error": 69, - "warning": 5 - }, + "data": { + "lintscan": { "issue_open_num": 74, - "issue_fix_num": 439 - }, - "total": { - "state_detail": { - "active": 197, - "resolved": 13, - "closed": 23297 + "issue_fix_num": 439, + "issue_detail_num": 310, + "scan": { + "id": 1, + "scan_time": "2021-03-11T20:46:44.171607+08:00", + "execute_time": "00:02:17.844712" }, - "category_detail": { - "convention": { - "active": 184, - "resolved": 13, - "closed": 21143 + "current_scan": { + "active_category_detail": { + "convention": 70, + "other": 4 }, - "other": { - "active": 13, - "closed": 154 + "active_severity_detail": { + "error": 69, + "warning": 5 }, - "correctness": { - "closed": 1997 - }, - "performance": { - "closed": 3 - } + "issue_open_num": 74, + "issue_fix_num": 439 }, - "severity_detail": { - "error": { - "active": 157, - "resolved": 11, - "closed": 20113 - }, - "warning": { - "active": 40, - "resolved": 2, - "closed": 2930 + "total": { + "state_detail": { + "active": 197, + "resolved": 13, + "closed": 23297 }, - "info": { - "closed": 254 - } - } - }, - "status": 0, - "text": "成功", - "description": null, - "scan_summary": { - "convention": { - "error": { - "rule_count": 7, - "active": 65 + "category_detail": { + "convention": { + "active": 184, + "resolved": 13, + "closed": 21143 + }, + "other": { + "active": 13, + "closed": 154 + }, + "correctness": { + "closed": 1997 + }, + "performance": { + "closed": 3 + } }, - "warning": { - "rule_count": 2, - "active": 5 + "severity_detail": { + "error": { + "active": 157, + "resolved": 11, + "closed": 20113 + }, + "warning": { + "active": 40, + "resolved": 2, + "closed": 2930 + }, + "info": { + "closed": 254 + } } }, - "other": { - "error": { - "rule_count": 1, - "active": 4 - } - } - }, - "total_summary": { - "correctness": { - "error": { - "rule_count": 16, - "closed": 1315 - }, - "warning": { - "rule_count": 10, - "closed": 629 + "status": 0, + "text": "成功", + "description": null, + "scan_summary": { + "convention": { + "error": { + "rule_count": 7, + "active": 65 + }, + "warning": { + "rule_count": 2, + "active": 5 + } }, - "info": { - "rule_count": 1, - "closed": 53 - } - }, - "performance": { - "warning": { - "rule_count": 1, - "closed": 3 + "other": { + "error": { + "rule_count": 1, + "active": 4 + } } }, - "convention": { - "error": { - "rule_count": 42, - "active": 149, - "resolved": 11, - "closed": 18778 - }, - "warning": { - "rule_count": 17, - "active": 35, - "resolved": 2, - "closed": 2298 + "total_summary": { + "correctness": { + "error": { + "rule_count": 16, + "closed": 1315 + }, + "warning": { + "rule_count": 10, + "closed": 629 + }, + "info": { + "rule_count": 1, + "closed": 53 + } }, - "info": { - "rule_count": 1, - "closed": 67 - } - }, - "other": { - "error": { - "rule_count": 2, - "active": 8, - "closed": 20 + "performance": { + "warning": { + "rule_count": 1, + "closed": 3 + } }, - "warning": { - "rule_count": 1, - "active": 5 + "convention": { + "error": { + "rule_count": 42, + "active": 149, + "resolved": 11, + "closed": 18778 + }, + "warning": { + "rule_count": 17, + "active": 35, + "resolved": 2, + "closed": 2298 + }, + "info": { + "rule_count": 1, + "closed": 67 + } }, - "info": { - "rule_count": 3, - "closed": 134 + "other": { + "error": { + "rule_count": 2, + "active": 8, + "closed": 20 + }, + "warning": { + "rule_count": 1, + "active": 5 + }, + "info": { + "rule_count": 3, + "closed": 134 + } } } - } - }, - "cyclomaticcomplexityscan": { - "id": 1, - "scan_revision": "scan_revision", - "scan_time": "2021-03-11T20:46:44.171607+08:00", - "default_summary": { - "min_ccn": 20, - "over_cc_func_count": 6, - "under_cc_func_count": 796, - "diff_over_cc_func_count": 0, - "over_cc_func_average": 22.333333333333332, - "cc_func_average": 2.5099750623441395, - "over_cc_sum": 14, - "cc_average_of_lines": 1.0422094841063054 }, - "custom_summary": null, - "created_time": "2021-03-11T20:48:59.976947+08:00", - "creator": null, - "modified_time": "2021-03-11T20:49:00.088841+08:00", - "modifier": null, - "deleted_time": null, - "deleter": null, - "last_revision": "last_revision", - "diff_cc_num": 0, - "cc_open_num": 6, - "cc_average_of_lines": 1.0422094841063054, - "cc_fix_num": 0, - "worse_cc_file_num": 0, - "min_ccn": 20, - "code_line_num": 13433, - "scan": 1 - }, - "duplicatescan": { - "id": 1, - "scan_revision": "scan_revision", - "scan_time": "2021-03-11T20:46:44.171607+08:00", - "default_summary": { - "exhi_risk": { - "range": [ - 0.2, - 1 - ], - "file_count": 1, - "diff": { - "diff_file_count": 0 - } - }, - "high_risk": { - "range": [ - 0.11, - 0.2 - ], - "file_count": 3, - "diff": { - "diff_file_count": 0 - } + "cyclomaticcomplexityscan": { + "id": 1, + "scan_revision": "scan_revision", + "scan_time": "2021-03-11T20:46:44.171607+08:00", + "default_summary": { + "min_ccn": 20, + "over_cc_func_count": 6, + "under_cc_func_count": 796, + "diff_over_cc_func_count": 0, + "over_cc_func_average": 22.333333333333332, + "cc_func_average": 2.5099750623441395, + "over_cc_sum": 14, + "cc_average_of_lines": 1.0422094841063054 }, - "midd_risk": { - "range": [ - 0.05, - 0.11 - ], - "file_count": 2, - "diff": { - "diff_file_count": 0 + "custom_summary": null, + "created_time": "2021-03-11T20:48:59.976947+08:00", + "creator": null, + "modified_time": "2021-03-11T20:49:00.088841+08:00", + "modifier": null, + "deleted_time": null, + "deleter": null, + "last_revision": "last_revision", + "diff_cc_num": 0, + "cc_open_num": 6, + "cc_average_of_lines": 1.0422094841063054, + "cc_fix_num": 0, + "worse_cc_file_num": 0, + "min_ccn": 20, + "code_line_num": 13433, + "scan": 1 + }, + "duplicatescan": { + "id": 1, + "scan_revision": "scan_revision", + "scan_time": "2021-03-11T20:46:44.171607+08:00", + "default_summary": { + "exhi_risk": { + "range": [ + 0.2, + 1 + ], + "file_count": 1, + "diff": { + "diff_file_count": 0 + } + }, + "high_risk": { + "range": [ + 0.11, + 0.2 + ], + "file_count": 3, + "diff": { + "diff_file_count": 0 + } + }, + "midd_risk": { + "range": [ + 0.05, + 0.11 + ], + "file_count": 2, + "diff": { + "diff_file_count": 0 + } + }, + "low_risk": { + "range": [ + 0, + 0.05 + ], + "file_count": 2, + "diff": { + "diff_file_count": 0 + } } }, - "low_risk": { - "range": [ - 0, - 0.05 - ], - "file_count": 2, - "diff": { - "diff_file_count": 0 - } - } + "custom_summary": null, + "last_revision": "last_revision", + "duplicate_file_count": 8, + "duplicate_block_count": 55, + "duplicate_line_count": 1177, + "diff_duplicate_block_count": 0, + "diff_duplicate_line_count": 0, + "close_issue_count": 0, + "new_issue_count": 0, + "reopen_issue_count": 5, + "ignored_issue_count": 0, + "duplicate_rate": 4.98, + "unique_duplicate_line_count": 1083, + "total_duplicate_line_count": 1083, + "total_line_count": 21745, + "scan": 1 }, - "custom_summary": null, - "last_revision": "last_revision", - "duplicate_file_count": 8, - "duplicate_block_count": 55, - "duplicate_line_count": 1177, - "diff_duplicate_block_count": 0, - "diff_duplicate_line_count": 0, - "close_issue_count": 0, - "new_issue_count": 0, - "reopen_issue_count": 5, - "ignored_issue_count": 0, - "duplicate_rate": 4.98, - "unique_duplicate_line_count": 1083, - "total_duplicate_line_count": 1083, - "total_line_count": 21745, - "scan": 1 + "clocscan": { + "id": 1, + "scan_revision": "scan_revision", + "scan_time": "2021-03-11T20:46:44.171607+08:00", + "last_revision": "last_revision", + "code_line_num": 140490, + "comment_line_num": 5410, + "blank_line_num": 3408, + "total_line_num": 149308, + "add_code_line_num": 6673, + "add_comment_line_num": 2309, + "add_blank_line_num": 1289, + "add_total_line_num": 10271, + "mod_code_line_num": 965, + "mod_comment_line_num": 297, + "mod_blank_line_num": 0, + "mod_total_line_num": 1262, + "del_code_line_num": 35844, + "del_comment_line_num": 2117, + "del_blank_line_num": 1794, + "del_total_line_num": 39755, + "scan": 1 + } }, - "clocscan": { - "id": 1, - "scan_revision": "scan_revision", - "scan_time": "2021-03-11T20:46:44.171607+08:00", - "last_revision": "last_revision", - "code_line_num": 140490, - "comment_line_num": 5410, - "blank_line_num": 3408, - "total_line_num": 149308, - "add_code_line_num": 6673, - "add_comment_line_num": 2309, - "add_blank_line_num": 1289, - "add_total_line_num": 10271, - "mod_code_line_num": 965, - "mod_comment_line_num": 297, - "mod_blank_line_num": 0, - "mod_total_line_num": 1262, - "del_code_line_num": 35844, - "del_comment_line_num": 2117, - "del_blank_line_num": 1794, - "del_total_line_num": 39755, - "scan": 1 - } + "code": 0, + "msg": "请求成功", + "status_code": 200 } ``` diff --git "a/doc/zh/api/\351\241\271\347\233\256\347\256\241\347\220\206\346\250\241\345\235\227\346\216\245\345\217\243.md" "b/doc/zh/api/\351\241\271\347\233\256\347\256\241\347\220\206\346\250\241\345\235\227\346\216\245\345\217\243.md" index b18030f49..9db684e52 100644 --- "a/doc/zh/api/\351\241\271\347\233\256\347\256\241\347\220\206\346\250\241\345\235\227\346\216\245\345\217\243.md" +++ "b/doc/zh/api/\351\241\271\347\233\256\347\256\241\347\220\206\346\250\241\345\235\227\346\216\245\345\217\243.md" @@ -50,6 +50,139 @@ GET /server/main/api/orgs//teams//repos/ } ``` +## 查看已创建的授权信息 + +``` +GET /server/main/api/authen/scmallaccounts/ +``` + +#### 返回结果 + +```JSON +{ + "data": { + "ssh": [ + { + "id": 1, + "user": { + "username": "CodeDog", + "nickname": "CodeDog", + "status": 1, + "avatar": null, + "latest_login_time": "2022-10-22T15:30:30+08:00", + "org": null + }, + "auth_origin": "CodeDog", + "indentity": "xxx", + "display_scm_platform": "tgit", + "name": "gerrit", + "scm_platform": 1, + "scm_platform_desc": null + } + ], + "account": [ + { + "id": 1, + "user": { + "username": "CodeDog", + "nickname": "CodeDog", + "status": 1, + "avatar": null, + "latest_login_time": "2022-10-22T15:30:30+08:00", + "org": null + }, + "auth_origin": "CodeDog", + "display_scm_platform": "tgit", + "scm_username": "CodeDog", + "scm_platform": 1, + "scm_platform_desc": null + } + ], + "oauth": [ + { + "id": 1, + "user": { + "username": "CodeDog", + "nickname": "CodeDog", + "status": 1, + "avatar": null, + "latest_login_time": "2022-10-22T15:30:30+08:00", + "org": null + }, + "auth_origin": "CodeDog", + "scm_platform_name": "tgit" + } + ], + } + "code": 0, + "msg": "请求成功", + "status_code": 200 +} +``` + + +## 登记代码库 + +``` +POST /server/main/api/orgs//teams//repos/ +``` + +#### 参数列表 +| 参数 | 类型 | 描述 | +| --- | --- | --- | +| scm_url | str | 必填,代码库地址 | +| scm_type | str | 必填,git或svn | +| ssh_url | str | 选填,代码库SSH地址 | +| name | str | 选填, 代码库名称 | +| scm_auth | dict | 代码库授权 | + +例子: + +```JSON +{ + "scm_url": "https://github.com/Tencent/CodeAnalysis", + "scm_type": "git", + "name": "CodeAnalysis", + "scm_auth": { + # 通过 查看已创建的授权信息 接口获取到对应的凭证id,scm_account、scm_oauth、scm_ssh 只需填一个 + "scm_account": account_id, + "scm_ssh": ssh_id, + "scm_oauth": oauth_id + } +} +``` + +#### 返回结果 + +```JSON +{ + "data":{ + "id": 1, + "name": "CodeAnalysis", + "scm_url": "http://github.com/Tencent/CodeAnalysis", + "scm_type": "git", + "branch_count": 0, + "scheme_count": 0, + "job_count": 0, + "created_time": "2022-10-22T16:30:30+08:00", + "recent_active": { + }, + "created_from": "codedog_web", + "creator": { + "username": "username", + "nickname": "nickname", + "status": 1, + "avatar": null, + "org": 1 + }, + "symbol": null + }, + "code": 0, + "msg": "请求成功", + "status_code": 200 +} +``` + ## 查看指定代码库详情 ``` diff --git a/server/projects/main/apps/authen/api_urls/v1.py b/server/projects/main/apps/authen/api_urls/v1.py index 416d628c2..db54843b5 100644 --- a/server/projects/main/apps/authen/api_urls/v1.py +++ b/server/projects/main/apps/authen/api_urls/v1.py @@ -14,9 +14,10 @@ from django.urls import path # 项目内 import -from apps.authen.apis import v1 +from apps.authen.apis import v1, v3 # 前缀/api/authen/ urlpatterns = [ path("urlauth/", v1.ProxyServerAuthenticationAPIView.as_view(), name="apiv1_authen_urlauth"), + path("scmallaccounts/", v3.ScmAllAcountListApiView.as_view.as_view(), name="apiv1_all_scm_accounts"), ] diff --git a/server/projects/main/apps/authen/apis/v3.py b/server/projects/main/apps/authen/apis/v3.py index 42bc7b52e..25b371e12 100644 --- a/server/projects/main/apps/authen/apis/v3.py +++ b/server/projects/main/apps/authen/apis/v3.py @@ -247,9 +247,11 @@ def get(self, request): user = self.request.user accounts = models.ScmAccount.objects.filter(user=user).order_by("-id") sshs = models.ScmSshInfo.objects.filter(user=user).order_by("-id") + oauths = models.ScmAuthInfo.objects.filter(user).order_by("-id") return Response({ "ssh": ScmSshInfoSerializer(sshs, many=True).data, "account": ScmAccountSerializer(accounts, many=True).data, + "oauth": ScmAuthInfoSerializer(oauths, many=True).data })