Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
徽霖
Vscode
提交
623c783e
V
Vscode
项目概览
徽霖
/
Vscode
通知
9
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
Vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
623c783e
编写于
8月 28, 2019
作者:
P
Pine Wu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Allow * in trustedDomains. Fix #79943
上级
cc3770ef
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
86 addition
and
15 deletion
+86
-15
src/vs/workbench/contrib/url/common/url.contribution.ts
src/vs/workbench/contrib/url/common/url.contribution.ts
+44
-15
src/vs/workbench/test/contrib/linkProtection.test.ts
src/vs/workbench/test/contrib/linkProtection.test.ts
+42
-0
未找到文件。
src/vs/workbench/contrib/url/common/url.contribution.ts
浏览文件 @
623c783e
...
...
@@ -14,7 +14,11 @@ import { Action } from 'vs/base/common/actions';
import
{
IStorageService
,
StorageScope
}
from
'
vs/platform/storage/common/storage
'
;
import
{
CommandsRegistry
}
from
'
vs/platform/commands/common/commands
'
;
import
{
ServicesAccessor
}
from
'
vs/platform/instantiation/common/instantiation
'
;
import
{
IWorkbenchContribution
,
IWorkbenchContributionsRegistry
,
Extensions
as
WorkbenchExtensions
}
from
'
vs/workbench/common/contributions
'
;
import
{
IWorkbenchContribution
,
IWorkbenchContributionsRegistry
,
Extensions
as
WorkbenchExtensions
}
from
'
vs/workbench/common/contributions
'
;
import
{
LifecyclePhase
}
from
'
vs/platform/lifecycle/common/lifecycle
'
;
import
{
IDialogService
}
from
'
vs/platform/dialogs/common/dialogs
'
;
import
{
IProductService
}
from
'
vs/platform/product/common/product
'
;
...
...
@@ -130,12 +134,7 @@ const configureTrustedDomainCommand = {
?
[...
productService
.
linkProtectionTrustedDomains
]
:
[];
return
configureTrustedDomainsHandler
(
quickInputService
,
storageService
,
trustedDomains
,
domainToConfigure
);
return
configureTrustedDomainsHandler
(
quickInputService
,
storageService
,
trustedDomains
,
domainToConfigure
);
}
};
...
...
@@ -178,9 +177,7 @@ class OpenerValidatorContributions implements IWorkbenchContribution {
const
domainToOpen
=
`
${
scheme
}
://
${
authority
}
`
;
if
(
isLocalhostAuthority
(
authority
))
{
return
true
;
}
else
if
(
isDomainTrusted
(
domainToOpen
,
trustedDomains
))
{
if
(
isURLDomainTrusted
(
resource
,
trustedDomains
))
{
return
true
;
}
else
{
const
choice
=
await
this
.
_dialogService
.
show
(
...
...
@@ -207,7 +204,12 @@ class OpenerValidatorContributions implements IWorkbenchContribution {
}
// Configure Trusted Domains
else
if
(
choice
===
2
)
{
const
pickedDomains
=
await
configureTrustedDomainsHandler
(
this
.
_quickInputService
,
this
.
_storageService
,
trustedDomains
,
domainToOpen
);
const
pickedDomains
=
await
configureTrustedDomainsHandler
(
this
.
_quickInputService
,
this
.
_storageService
,
trustedDomains
,
domainToOpen
);
if
(
pickedDomains
.
indexOf
(
domainToOpen
)
!==
-
1
)
{
return
true
;
}
...
...
@@ -224,8 +226,8 @@ Registry.as<IWorkbenchContributionsRegistry>(WorkbenchExtensions.Workbench).regi
LifecyclePhase
.
Restored
);
const
rLocalhost
=
/^localhost
:
\d
+
$/i
;
const
r127
=
/^127.0.0.1
:
\d
+
$/
;
const
rLocalhost
=
/^localhost
(
:
\d
+
)?
$/i
;
const
r127
=
/^127.0.0.1
(
:
\d
+
)?
$/
;
function
isLocalhostAuthority
(
authority
:
string
)
{
return
rLocalhost
.
test
(
authority
)
||
r127
.
test
(
authority
);
...
...
@@ -234,8 +236,18 @@ function isLocalhostAuthority(authority: string) {
/**
* Check whether a domain like https://www.microsoft.com matches
* the list of trusted domains.
*
* - Schemes must match
* - There's no subdomain matching. For example https://microsoft.com doesn't match https://www.microsoft.com
* - Star matches all. For example https://*.microsoft.com matches https://www.microsoft.com
*/
function
isDomainTrusted
(
domain
:
string
,
trustedDomains
:
string
[])
{
export
function
isURLDomainTrusted
(
url
:
URI
,
trustedDomains
:
string
[])
{
if
(
isLocalhostAuthority
(
url
.
authority
))
{
return
true
;
}
const
domain
=
`
${
url
.
scheme
}
://
${
url
.
authority
}
`
;
for
(
let
i
=
0
;
i
<
trustedDomains
.
length
;
i
++
)
{
if
(
trustedDomains
[
i
]
===
'
*
'
)
{
return
true
;
...
...
@@ -244,8 +256,25 @@ function isDomainTrusted(domain: string, trustedDomains: string[]) {
if
(
trustedDomains
[
i
]
===
domain
)
{
return
true
;
}
if
(
trustedDomains
[
i
].
indexOf
(
'
*
'
)
!==
-
1
)
{
const
parsedTrustedDomain
=
URI
.
parse
(
trustedDomains
[
i
]);
if
(
url
.
scheme
===
parsedTrustedDomain
.
scheme
)
{
const
authoritySegments
=
url
.
authority
.
split
(
'
.
'
);
const
trustedDomainAuthoritySegments
=
parsedTrustedDomain
.
authority
.
split
(
'
.
'
);
if
(
authoritySegments
.
length
===
trustedDomainAuthoritySegments
.
length
)
{
if
(
authoritySegments
.
every
(
(
val
,
i
)
=>
trustedDomainAuthoritySegments
[
i
]
===
'
*
'
||
val
===
trustedDomainAuthoritySegments
[
i
]
)
)
{
return
true
;
}
}
}
}
}
return
false
;
}
src/vs/workbench/test/contrib/linkProtection.test.ts
0 → 100644
浏览文件 @
623c783e
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import
*
as
assert
from
'
assert
'
;
import
{
isURLDomainTrusted
}
from
'
vs/workbench/contrib/url/common/url.contribution
'
;
import
{
URI
}
from
'
vs/base/common/uri
'
;
suite
(
'
Link protection domain matching
'
,
()
=>
{
test
(
'
simple
'
,
()
=>
{
assert
.
ok
(
!
isURLDomainTrusted
(
URI
.
parse
(
'
https://x.org
'
),
[]));
assert
.
ok
(
isURLDomainTrusted
(
URI
.
parse
(
'
https://x.org
'
),
[
'
https://x.org
'
]));
assert
.
ok
(
isURLDomainTrusted
(
URI
.
parse
(
'
https://x.org/foo
'
),
[
'
https://x.org
'
]));
assert
.
ok
(
!
isURLDomainTrusted
(
URI
.
parse
(
'
https://x.org
'
),
[
'
http://x.org
'
]));
assert
.
ok
(
!
isURLDomainTrusted
(
URI
.
parse
(
'
http://x.org
'
),
[
'
https://x.org
'
]));
assert
.
ok
(
!
isURLDomainTrusted
(
URI
.
parse
(
'
https://www.x.org
'
),
[
'
https://x.org
'
]));
assert
.
ok
(
isURLDomainTrusted
(
URI
.
parse
(
'
https://www.x.org
'
),
[
'
https://www.x.org
'
,
'
https://y.org
'
]));
});
test
(
'
localhost
'
,
()
=>
{
assert
.
ok
(
isURLDomainTrusted
(
URI
.
parse
(
'
https://127.0.0.1
'
),
[]));
assert
.
ok
(
isURLDomainTrusted
(
URI
.
parse
(
'
https://127.0.0.1:3000
'
),
[]));
assert
.
ok
(
isURLDomainTrusted
(
URI
.
parse
(
'
https://localhost
'
),
[]));
assert
.
ok
(
isURLDomainTrusted
(
URI
.
parse
(
'
https://localhost:3000
'
),
[]));
});
test
(
'
* star
'
,
()
=>
{
assert
.
ok
(
isURLDomainTrusted
(
URI
.
parse
(
'
https://a.x.org
'
),
[
'
https://*.x.org
'
]));
assert
.
ok
(
isURLDomainTrusted
(
URI
.
parse
(
'
https://a.x.org
'
),
[
'
https://a.x.*
'
]));
assert
.
ok
(
isURLDomainTrusted
(
URI
.
parse
(
'
https://a.x.org
'
),
[
'
https://a.*.org
'
]));
assert
.
ok
(
isURLDomainTrusted
(
URI
.
parse
(
'
https://a.x.org
'
),
[
'
https://*.*.org
'
]));
assert
.
ok
(
!
isURLDomainTrusted
(
URI
.
parse
(
'
https://a.b.c.org
'
),
[
'
https://*.*.org
'
]));
assert
.
ok
(
isURLDomainTrusted
(
URI
.
parse
(
'
https://a.b.c.org
'
),
[
'
https://*.*.*.org
'
]));
});
});
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录