Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
一杯枸杞茶ya
csdn-workflow
提交
f4f7d48e
C
csdn-workflow
项目概览
一杯枸杞茶ya
/
csdn-workflow
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
csdn-workflow
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
f4f7d48e
编写于
10月 26, 2020
作者:
T
Tomas Vik
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat: include user-agent header in all API requets
上级
61ce26eb
变更
11
隐藏空白更改
内联
并排
Showing
11 changed file
with
99 addition
and
32 deletion
+99
-32
src/gitlab/gitlab_new_service.ts
src/gitlab/gitlab_new_service.ts
+2
-7
src/gitlab_service.js
src/gitlab_service.js
+2
-0
src/services/token_service.ts
src/services/token_service.ts
+2
-2
src/token_input.js
src/token_input.js
+2
-2
src/utils/get_user_agent_header.ts
src/utils/get_user_agent_header.ts
+13
-0
test/integration/insert_snippet.test.js
test/integration/insert_snippet.test.js
+5
-5
test/integration/status_bar.test.js
test/integration/status_bar.test.js
+5
-5
test/integration/test_infrastructure/constants.ts
test/integration/test_infrastructure/constants.ts
+2
-1
test/integration/test_infrastructure/mock_server.js
test/integration/test_infrastructure/mock_server.js
+3
-5
test/integration/tree_view.test.js
test/integration/tree_view.test.js
+5
-5
test/integration/user_agent.test.js
test/integration/user_agent.test.js
+58
-0
未找到文件。
src/gitlab/gitlab_new_service.ts
浏览文件 @
f4f7d48e
...
...
@@ -5,6 +5,7 @@ import { URL } from 'url';
import
*
as
createHttpProxyAgent
from
'
https-proxy-agent
'
;
import
{
tokenService
}
from
'
../services/token_service
'
;
import
{
FetchError
}
from
'
../errors/fetch_error
'
;
import
{
getUserAgentHeader
}
from
'
../utils/get_user_agent_header
'
;
interface
Node
<
T
>
{
nodes
:
T
[];
...
...
@@ -51,12 +52,6 @@ const queryGetSnippets = gql`
}
`
;
const
getUserAgent
=
()
=>
{
const
extension
=
vscode
.
extensions
.
getExtension
(
'
GitLab.gitlab-workflow
'
);
const
packageJson
:
Record
<
string
,
string
|
undefined
>
=
extension
?.
packageJSON
;
return
`vs-code-gitlab-workflow/
${
packageJson
.
version
}
`
;
};
export
class
GitLabNewService
{
client
:
GraphQLClient
;
...
...
@@ -75,7 +70,7 @@ export class GitLabNewService {
return
{
headers
:
{
Authorization
:
`Bearer
${
token
}
`
,
'
User-Agent
'
:
getUserAgent
(),
...
getUserAgentHeader
(),
},
agent
,
};
...
...
src/gitlab_service.js
浏览文件 @
f4f7d48e
...
...
@@ -8,6 +8,7 @@ const { ApiError } = require('./errors/api_error');
const
{
getCurrentWorkspaceFolder
}
=
require
(
'
./services/workspace_service
'
);
const
{
createGitService
}
=
require
(
'
./git_service_factory
'
);
const
{
handleError
,
logError
}
=
require
(
'
./log
'
);
const
{
getUserAgentHeader
}
=
require
(
'
./utils/get_user_agent_header
'
);
const
projectCache
=
[];
let
versionCache
=
null
;
...
...
@@ -44,6 +45,7 @@ async function fetch(path, method = 'GET', data = null) {
method
,
headers
:
{
'
PRIVATE-TOKEN
'
:
glToken
,
...
getUserAgentHeader
(),
},
ecdhCurve
:
'
auto
'
,
rejectUnauthorized
:
!
ignoreCertificateErrors
,
...
...
src/services/token_service.ts
浏览文件 @
f4f7d48e
...
...
@@ -27,7 +27,7 @@ export class TokenService {
return
this
.
glTokenMap
[
instanceUrl
];
}
setToken
(
instanceUrl
:
string
,
token
:
string
|
undefined
)
{
async
setToken
(
instanceUrl
:
string
,
token
:
string
|
undefined
)
{
assert
(
this
.
context
);
const
tokenMap
=
this
.
glTokenMap
;
...
...
@@ -37,7 +37,7 @@ export class TokenService {
delete
tokenMap
[
instanceUrl
];
}
this
.
context
.
globalState
.
update
(
'
glTokens
'
,
tokenMap
);
await
this
.
context
.
globalState
.
update
(
'
glTokens
'
,
tokenMap
);
this
.
onDidChangeEmitter
.
fire
();
}
}
...
...
src/token_input.js
浏览文件 @
f4f7d48e
...
...
@@ -17,7 +17,7 @@ async function showInput() {
});
if
(
instance
&&
token
)
{
tokenService
.
setToken
(
instance
,
token
);
await
tokenService
.
setToken
(
instance
,
token
);
}
}
...
...
@@ -29,7 +29,7 @@ async function removeTokenPicker() {
});
if
(
selectedInstanceUrl
)
{
tokenService
.
setToken
(
selectedInstanceUrl
,
undefined
);
await
tokenService
.
setToken
(
selectedInstanceUrl
,
undefined
);
}
}
...
...
src/utils/get_user_agent_header.ts
0 → 100644
浏览文件 @
f4f7d48e
import
*
as
vscode
from
'
vscode
'
;
export
const
getUserAgentHeader
=
():
Record
<
string
,
string
>
=>
{
const
extension
=
vscode
.
extensions
.
getExtension
(
'
GitLab.gitlab-workflow
'
);
const
extensionVersion
=
extension
?.
packageJSON
?.
version
;
const
nodePlatform
=
`Node.js/
${
process
.
version
.
substr
(
1
)}
(
${
process
.
platform
}
;
${
process
.
arch
}
)`
;
const
vsCodeVersion
=
vscode
.
version
;
return
{
'
User-Agent
'
:
`vs-code-gitlab-workflow/
${
extensionVersion
}
VSCode/
${
vsCodeVersion
}
${
nodePlatform
}
`
,
};
};
test/integration/insert_snippet.test.js
浏览文件 @
f4f7d48e
...
...
@@ -5,7 +5,7 @@ const simpleGit = require('simple-git');
const
{
insertSnippet
}
=
require
(
'
../../src/commands/insert_snippet
'
);
const
{
tokenService
}
=
require
(
'
../../src/services/token_service
'
);
const
getServer
=
require
(
'
./test_infrastructure/mock_server
'
);
const
{
GITLAB_
HOST
,
REMOTE
}
=
require
(
'
./test_infrastructure/constants
'
);
const
{
GITLAB_
URL
,
REMOTE
}
=
require
(
'
./test_infrastructure/constants
'
);
const
{
createAndOpenFile
,
closeAndDeleteFile
,
...
...
@@ -17,9 +17,9 @@ describe('Insert snippet', async () => {
let
testFileUri
;
const
sandbox
=
sinon
.
createSandbox
();
before
(()
=>
{
before
(
async
()
=>
{
server
=
getServer
();
tokenService
.
setToken
(
`https://
${
GITLAB_HOST
}
`
,
'
abcd-secret
'
);
await
tokenService
.
setToken
(
GITLAB_URL
,
'
abcd-secret
'
);
});
beforeEach
(
async
()
=>
{
...
...
@@ -36,9 +36,9 @@ describe('Insert snippet', async () => {
await
closeAndDeleteFile
(
testFileUri
);
});
after
(()
=>
{
after
(
async
()
=>
{
server
.
close
();
tokenService
.
setToken
(
`https://
${
GITLAB_HOST
}
`
,
undefined
);
await
tokenService
.
setToken
(
GITLAB_URL
,
undefined
);
});
it
(
'
inserts snippet when there is only one blob
'
,
async
()
=>
{
...
...
test/integration/status_bar.test.js
浏览文件 @
f4f7d48e
...
...
@@ -4,7 +4,7 @@ const vscode = require('vscode');
const
statusBar
=
require
(
'
../../src/status_bar
'
);
const
{
tokenService
}
=
require
(
'
../../src/services/token_service
'
);
const
getServer
=
require
(
'
./test_infrastructure/mock_server
'
);
const
{
GITLAB_
HOST
}
=
require
(
'
./test_infrastructure/constants
'
);
const
{
GITLAB_
URL
}
=
require
(
'
./test_infrastructure/constants
'
);
describe
(
'
GitLab status bar
'
,
()
=>
{
let
server
;
...
...
@@ -17,9 +17,9 @@ describe('GitLab status bar', () => {
return
fakeItem
;
};
before
(()
=>
{
before
(
async
()
=>
{
server
=
getServer
();
tokenService
.
setToken
(
`https://
${
GITLAB_HOST
}
`
,
'
abcd-secret
'
);
await
tokenService
.
setToken
(
GITLAB_URL
,
'
abcd-secret
'
);
});
beforeEach
(()
=>
{
...
...
@@ -33,9 +33,9 @@ describe('GitLab status bar', () => {
returnedItems
=
[];
});
after
(()
=>
{
after
(
async
()
=>
{
server
.
close
();
tokenService
.
setToken
(
`https://
${
GITLAB_HOST
}
`
,
undefined
);
await
tokenService
.
setToken
(
GITLAB_URL
,
undefined
);
});
it
(
'
shows the correct pipeline item
'
,
async
()
=>
{
...
...
test/integration/test_infrastructure/constants.ts
浏览文件 @
f4f7d48e
export
const
GITLAB_HOST
=
'
test.gitlab.com
'
;
export
const
GITLAB_URL
=
'
https://test.gitlab.com
'
;
export
const
API_URL_PREFIX
=
`
${
GITLAB_URL
}
/api/v4`
;
export
const
REMOTE
=
{
NAME
:
'
origin
'
,
URL
:
'
git@test.gitlab.com:gitlab-org/gitlab.git
'
,
...
...
test/integration/test_infrastructure/mock_server.js
浏览文件 @
f4f7d48e
const
{
setupServer
}
=
require
(
'
msw/node
'
);
const
{
rest
,
graphql
}
=
require
(
'
msw
'
);
const
{
GITLAB_HOST
}
=
require
(
'
./constants
'
);
const
{
API_URL_PREFIX
}
=
require
(
'
./constants
'
);
const
projectResponse
=
require
(
'
../fixtures/rest/project.json
'
);
const
versionResponse
=
require
(
'
../fixtures/rest/version.json
'
);
const
openIssueResponse
=
require
(
'
../fixtures/rest/open_issue.json
'
);
...
...
@@ -9,15 +9,13 @@ const pipelinesResponse = require('../fixtures/rest/pipelines.json');
const
pipelineResponse
=
require
(
'
../fixtures/rest/pipeline.json
'
);
const
snippetsResponse
=
require
(
'
../fixtures/graphql/snippets.json
'
);
const
instancePrefix
=
`https://
${
GITLAB_HOST
}
/api/v4`
;
const
createJsonEndpoint
=
(
path
,
response
)
=>
rest
.
get
(
`
${
instancePrefix
}${
path
}
`
,
(
req
,
res
,
ctx
)
=>
{
rest
.
get
(
`
${
API_URL_PREFIX
}${
path
}
`
,
(
req
,
res
,
ctx
)
=>
{
return
res
(
ctx
.
status
(
200
),
ctx
.
json
(
response
));
});
const
createTextEndpoint
=
(
path
,
response
)
=>
rest
.
get
(
`
${
instancePrefix
}${
path
}
`
,
(
req
,
res
,
ctx
)
=>
{
rest
.
get
(
`
${
API_URL_PREFIX
}${
path
}
`
,
(
req
,
res
,
ctx
)
=>
{
return
res
(
ctx
.
status
(
200
),
ctx
.
text
(
response
));
});
...
...
test/integration/tree_view.test.js
浏览文件 @
f4f7d48e
...
...
@@ -2,15 +2,15 @@ const assert = require('assert');
const
IssuableDataProvider
=
require
(
'
../../src/data_providers/issuable
'
).
DataProvider
;
const
{
tokenService
}
=
require
(
'
../../src/services/token_service
'
);
const
getServer
=
require
(
'
./test_infrastructure/mock_server
'
);
const
{
GITLAB_
HOST
}
=
require
(
'
./test_infrastructure/constants
'
);
const
{
GITLAB_
URL
}
=
require
(
'
./test_infrastructure/constants
'
);
describe
(
'
GitLab tree view
'
,
()
=>
{
let
server
;
let
dataProvider
;
before
(()
=>
{
before
(
async
()
=>
{
server
=
getServer
();
tokenService
.
setToken
(
`https://
${
GITLAB_HOST
}
`
,
'
abcd-secret
'
);
await
tokenService
.
setToken
(
GITLAB_URL
,
'
abcd-secret
'
);
});
beforeEach
(()
=>
{
...
...
@@ -18,9 +18,9 @@ describe('GitLab tree view', () => {
dataProvider
=
new
IssuableDataProvider
();
});
after
(()
=>
{
after
(
async
()
=>
{
server
.
close
();
tokenService
.
setToken
(
`https://
${
GITLAB_HOST
}
`
,
undefined
);
await
tokenService
.
setToken
(
GITLAB_URL
,
undefined
);
});
/**
...
...
test/integration/user_agent.test.js
0 → 100644
浏览文件 @
f4f7d48e
const
{
setupServer
}
=
require
(
'
msw/node
'
);
const
{
rest
,
graphql
}
=
require
(
'
msw
'
);
const
assert
=
require
(
'
assert
'
);
const
{
API_URL_PREFIX
,
GITLAB_URL
}
=
require
(
'
./test_infrastructure/constants
'
);
const
{
tokenService
}
=
require
(
'
../../src/services/token_service
'
);
const
gitLabService
=
require
(
'
../../src/gitlab_service
'
);
const
{
GitLabNewService
}
=
require
(
'
../../src/gitlab/gitlab_new_service
'
);
const
snippetsResponse
=
require
(
'
./fixtures/graphql/snippets.json
'
);
const
validateUserAgent
=
req
=>
{
const
userAgent
=
req
.
headers
.
get
(
'
User-Agent
'
);
assert
(
userAgent
.
startsWith
(
'
vs-code-gitlab-workflow/
'
),
`User-Agent header
${
userAgent
}
must start with vs-code-gitlab-workflow/`
,
);
};
describe
(
'
User-Agent header
'
,
()
=>
{
let
server
;
let
capturedRequest
;
before
(
async
()
=>
{
server
=
setupServer
(
rest
.
get
(
`
${
API_URL_PREFIX
}
/user`
,
(
req
,
res
,
ctx
)
=>
{
capturedRequest
=
req
;
return
res
(
ctx
.
status
(
200
),
ctx
.
json
({}));
}),
graphql
.
query
(
'
GetSnippets
'
,
(
req
,
res
,
ctx
)
=>
{
capturedRequest
=
req
;
return
res
(
ctx
.
data
(
snippetsResponse
));
}),
);
server
.
listen
();
await
tokenService
.
setToken
(
GITLAB_URL
,
'
abcd-secret
'
);
});
beforeEach
(()
=>
{
server
.
resetHandlers
();
capturedRequest
=
undefined
;
});
after
(
async
()
=>
{
server
.
close
();
await
tokenService
.
setToken
(
GITLAB_URL
,
undefined
);
});
it
(
'
is sent with requests from GitLabService
'
,
async
()
=>
{
await
gitLabService
.
fetchCurrentUser
();
validateUserAgent
(
capturedRequest
);
});
it
(
'
is sent with requests from GitLabNewService
'
,
async
()
=>
{
const
subject
=
new
GitLabNewService
(
GITLAB_URL
);
await
subject
.
getSnippets
(
'
gitlab-org/gitlab
'
);
validateUserAgent
(
capturedRequest
);
});
});
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录