Skip to content

Commit

Permalink
feat: copilot 编辑器支持免登录 #11290
Browse files Browse the repository at this point in the history
  • Loading branch information
hejieehe committed Dec 6, 2024
1 parent bd91889 commit add584e
Show file tree
Hide file tree
Showing 6 changed files with 162 additions and 56 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -29,15 +29,13 @@ package com.tencent.devops.repository.pojo.enums

enum class TokenTypeEnum(val type: Int) {
OAUTH(0), // oauth认证
PRIVATE_KEY(1), // oauth认证
COPILOT_TOKEN(2); // copilot token
PRIVATE_KEY(1); // privateKey认证

companion object {
fun getTokenType(type: Int): String {
return when (type) {
0 -> OAUTH.name
1 -> PRIVATE_KEY.name
2 -> COPILOT_TOKEN.name
else -> OAUTH.name
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
/*
* Tencent is pleased to support the open source community by making BK-CI 蓝鲸持续集成平台 available.
*
* Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
*
* BK-CI 蓝鲸持续集成平台 is licensed under the MIT license.
*
* A copy of the MIT License is included in this file.
*
*
* Terms of the MIT License:
* ---------------------------------------------------
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
* documentation files (the "Software"), to deal in the Software without restriction, including without limitation the
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of
* the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
* LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
* NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/

package com.tencent.devops.repository.pojo.oauth

import com.fasterxml.jackson.annotation.JsonProperty
import io.swagger.v3.oas.annotations.media.Schema

@Schema(title = "Token模型")
data class RepositoryScmToken(
@get:Schema(title = "鉴权token")
@JsonProperty("access_token")
var userId: String = "",
@get:Schema(title = "代码库类型")
var scmCode: String = "",
@get:Schema(title = "应用类型")
var appType: String = "",
@get:Schema(title = "鉴权token")
var accessToken: String = "",
@get:Schema(title = "刷新token")
var refreshToken: String = "",
@get:Schema(title = "过期时间")
val expiresIn: Long = 0L,
@get:Schema(title = "创建时间")
val createTime: Long? = 0L
)
Original file line number Diff line number Diff line change
Expand Up @@ -36,14 +36,10 @@ import java.time.LocalDateTime

@Repository
class GitTokenDao {
fun getAccessToken(
dslContext: DSLContext,
userId: String,
tokenType: String = DEFAULT_TOKEN_TYPE
): TRepositoryGitTokenRecord? {
fun getAccessToken(dslContext: DSLContext, userId: String): TRepositoryGitTokenRecord? {
with(TRepositoryGitToken.T_REPOSITORY_GIT_TOKEN) {
return dslContext.selectFrom(this)
.where(USER_ID.eq(userId).and(TOKEN_TYPE.eq(tokenType)))
.where(USER_ID.eq(userId))
.fetchOne()
}
}
Expand Down Expand Up @@ -77,20 +73,11 @@ class GitTokenDao {
}
}

fun deleteToken(
dslContext: DSLContext,
userId: String,
tokenType: String = DEFAULT_TOKEN_TYPE
): Int {
fun deleteToken(dslContext: DSLContext, userId: String): Int {
with(TRepositoryGitToken.T_REPOSITORY_GIT_TOKEN) {
return dslContext.deleteFrom(this)
.where(USER_ID.eq(userId).and(TOKEN_TYPE.eq(tokenType)))
.where(USER_ID.eq(userId))
.execute()
}
}

companion object {
// oauth授权后的默认token类型
const val DEFAULT_TOKEN_TYPE = "bearer"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
/*
* Tencent is pleased to support the open source community by making BK-CI 蓝鲸持续集成平台 available.
*
* Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
*
* BK-CI 蓝鲸持续集成平台 is licensed under the MIT license.
*
* A copy of the MIT License is included in this file.
*
*
* Terms of the MIT License:
* ---------------------------------------------------
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
* documentation files (the "Software"), to deal in the Software without restriction, including without limitation the
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of
* the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
* LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
* NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/

package com.tencent.devops.repository.dao

import com.tencent.devops.model.repository.tables.TRepositoryScmToken
import com.tencent.devops.model.repository.tables.records.TRepositoryScmTokenRecord
import com.tencent.devops.repository.pojo.oauth.RepositoryScmToken
import org.jooq.DSLContext
import org.springframework.stereotype.Repository
import java.time.LocalDateTime

@Repository
class RepositoryScmTokenDao {
fun getToken(
dslContext: DSLContext,
userId: String,
scmCode: String,
appType: String
): TRepositoryScmTokenRecord? {
with(TRepositoryScmToken.T_REPOSITORY_SCM_TOKEN) {
return dslContext.selectFrom(this)
.where(
USER_ID.eq(userId)
.and(SCM_CODE.eq(scmCode))
.and(
APP_TYPE.eq(appType)
)
)
.fetchOne()
}
}

fun saveAccessToken(dslContext: DSLContext, scmToken: RepositoryScmToken): Int {
with(TRepositoryScmToken.T_REPOSITORY_SCM_TOKEN) {
return dslContext.insertInto(
this,
USER_ID,
SCM_CODE,
APP_TYPE,
ACCESS_TOKEN,
REFRESH_TOKEN,
EXPIRES_IN,
CREATE_TIME
)
.values(
scmToken.userId,
scmToken.scmCode,
scmToken.appType,
scmToken.accessToken,
scmToken.refreshToken,
scmToken.expiresIn,
LocalDateTime.now()
)
.onDuplicateKeyUpdate()
.set(ACCESS_TOKEN, scmToken.accessToken)
.set(REFRESH_TOKEN, scmToken.refreshToken)
.set(EXPIRES_IN, scmToken.expiresIn)
.set(UPDATE_TIME, LocalDateTime.now())
.execute()
}
}
}
21 changes: 20 additions & 1 deletion support-files/sql/1001_ci_repository_ddl_mysql.sql
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ CREATE TABLE IF NOT EXISTS `T_REPOSITORY_GIT_TOKEN` (
`EXPIRES_IN` bigint(20) DEFAULT NULL COMMENT '过期时间',
`CREATE_TIME` datetime DEFAULT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'token的创建时间',
PRIMARY KEY (`ID`),
UNIQUE KEY `T_REPOSITORY_GIT_TOKEN_UNIQUE` (`USER_ID`, `TOKEN_TYPE`)
UNIQUE KEY `USER_ID` (`USER_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='工蜂commit checker表';


Expand Down Expand Up @@ -244,4 +244,23 @@ CREATE TABLE IF NOT EXISTS `T_REPOSITORY_WEBHOOK_REQUEST`
PRIMARY KEY (`REQUEST_ID`, `CREATE_TIME`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT ='代码库WEBHOOK请求表';


-- ----------------------------
-- Table structure for T_REPOSITORY_SCM_TOKEN
-- ----------------------------

CREATE TABLE IF NOT EXISTS `T_REPOSITORY_SCM_TOKEN` (
`ID` bigint(20) NOT NULL AUTO_INCREMENT,
`USER_ID` varchar(64) NOT NULL DEFAULT '' COMMENT '用户名',
`SCM_CODE` varchar(64) NOT NULL DEFAULT '' COMMENT '代码库类型',
`APP_TYPE` varchar(64) NOT NULL DEFAULT '' COMMENT 'app类型',
`ACCESS_TOKEN` varchar(256) DEFAULT NULL COMMENT 'access token 密文',
`REFRESH_TOKEN` varchar(256) DEFAULT NULL COMMENT 'access refresh token',
`EXPIRES_IN` bigint(20) DEFAULT NULL COMMENT '过期时间',
`CREATE_TIME` datetime DEFAULT NULL COMMENT '创建时间',
`UPDATE_TIME` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`ID`),
UNIQUE KEY `t_repository_scm_token_unique` (`USER_ID`,`SCM_CODE`,`APP_TYPE`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='代码仓库token表';

SET FOREIGN_KEY_CHECKS = 1;

This file was deleted.

0 comments on commit add584e

Please sign in to comment.