Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
gzupanda
code-server
提交
2928d362
C
code-server
项目概览
gzupanda
/
code-server
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
code-server
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
未验证
提交
2928d362
编写于
10月 15, 2020
作者:
A
Asher
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Move heart and AuthType out of http
This file is going to get blasted in favor of Express.
上级
dcb303a4
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
59 addition
and
55 deletion
+59
-55
src/node/app/health.ts
src/node/app/health.ts
+2
-1
src/node/app/login.ts
src/node/app/login.ts
+2
-1
src/node/cli.ts
src/node/cli.ts
+5
-1
src/node/heart.ts
src/node/heart.ts
+46
-0
src/node/http.ts
src/node/http.ts
+2
-49
test/update.test.ts
test/update.test.ts
+2
-3
未找到文件。
src/node/app/health.ts
浏览文件 @
2928d362
import
{
HttpProvider
,
HttpResponse
,
Heart
,
HttpProviderOptions
}
from
"
../http
"
import
{
Heart
}
from
"
../heart
"
import
{
HttpProvider
,
HttpProviderOptions
,
HttpResponse
}
from
"
../http
"
/**
* Check the heartbeat.
...
...
src/node/app/login.ts
浏览文件 @
2928d362
...
...
@@ -2,7 +2,8 @@ import * as http from "http"
import
*
as
limiter
from
"
limiter
"
import
*
as
querystring
from
"
querystring
"
import
{
HttpCode
,
HttpError
}
from
"
../../common/http
"
import
{
AuthType
,
HttpProvider
,
HttpProviderOptions
,
HttpResponse
,
Route
}
from
"
../http
"
import
{
AuthType
}
from
"
../cli
"
import
{
HttpProvider
,
HttpProviderOptions
,
HttpResponse
,
Route
}
from
"
../http
"
import
{
hash
,
humanPath
}
from
"
../util
"
interface
LoginPayload
{
...
...
src/node/cli.ts
浏览文件 @
2928d362
...
...
@@ -4,9 +4,13 @@ import yaml from "js-yaml"
import
*
as
os
from
"
os
"
import
*
as
path
from
"
path
"
import
{
Args
as
VsArgs
}
from
"
../../lib/vscode/src/vs/server/ipc
"
import
{
AuthType
}
from
"
./http
"
import
{
canConnect
,
generateCertificate
,
generatePassword
,
humanPath
,
paths
}
from
"
./util
"
export
enum
AuthType
{
Password
=
"
password
"
,
None
=
"
none
"
,
}
export
class
Optional
<
T
>
{
public
constructor
(
public
readonly
value
?:
T
)
{}
}
...
...
src/node/heart.ts
0 → 100644
浏览文件 @
2928d362
import
{
logger
}
from
"
@coder/logger
"
import
{
promises
as
fs
}
from
"
fs
"
/**
* Provides a heartbeat using a local file to indicate activity.
*/
export
class
Heart
{
private
heartbeatTimer
?:
NodeJS
.
Timeout
private
heartbeatInterval
=
60000
public
lastHeartbeat
=
0
public
constructor
(
private
readonly
heartbeatPath
:
string
,
private
readonly
isActive
:
()
=>
Promise
<
boolean
>
)
{}
public
alive
():
boolean
{
const
now
=
Date
.
now
()
return
now
-
this
.
lastHeartbeat
<
this
.
heartbeatInterval
}
/**
* Write to the heartbeat file if we haven't already done so within the
* timeout and start or reset a timer that keeps running as long as there is
* activity. Failures are logged as warnings.
*/
public
beat
():
void
{
if
(
!
this
.
alive
())
{
logger
.
trace
(
"
heartbeat
"
)
fs
.
writeFile
(
this
.
heartbeatPath
,
""
).
catch
((
error
)
=>
{
logger
.
warn
(
error
.
message
)
})
this
.
lastHeartbeat
=
Date
.
now
()
if
(
typeof
this
.
heartbeatTimer
!==
"
undefined
"
)
{
clearTimeout
(
this
.
heartbeatTimer
)
}
this
.
heartbeatTimer
=
setTimeout
(()
=>
{
this
.
isActive
()
.
then
((
active
)
=>
{
if
(
active
)
{
this
.
beat
()
}
})
.
catch
((
error
)
=>
{
logger
.
warn
(
error
.
message
)
})
},
this
.
heartbeatInterval
)
}
}
}
src/node/http.ts
浏览文件 @
2928d362
...
...
@@ -13,6 +13,8 @@ import * as tls from "tls"
import
*
as
url
from
"
url
"
import
{
HttpCode
,
HttpError
}
from
"
../common/http
"
import
{
arrayify
,
normalize
,
Options
,
plural
,
split
,
trimSlashes
}
from
"
../common/util
"
import
{
AuthType
}
from
"
./cli
"
import
{
Heart
}
from
"
./heart
"
import
{
SocketProxyProvider
}
from
"
./socket
"
import
{
getMediaMime
,
paths
}
from
"
./util
"
...
...
@@ -27,11 +29,6 @@ interface AuthPayload extends Cookies {
key
?:
string
[]
}
export
enum
AuthType
{
Password
=
"
password
"
,
None
=
"
none
"
,
}
export
type
Query
=
{
[
key
:
string
]:
string
|
string
[]
|
undefined
}
export
interface
ProxyOptions
{
...
...
@@ -390,50 +387,6 @@ export abstract class HttpProvider {
}
}
/**
* Provides a heartbeat using a local file to indicate activity.
*/
export
class
Heart
{
private
heartbeatTimer
?:
NodeJS
.
Timeout
private
heartbeatInterval
=
60000
public
lastHeartbeat
=
0
public
constructor
(
private
readonly
heartbeatPath
:
string
,
private
readonly
isActive
:
()
=>
Promise
<
boolean
>
)
{}
public
alive
():
boolean
{
const
now
=
Date
.
now
()
return
now
-
this
.
lastHeartbeat
<
this
.
heartbeatInterval
}
/**
* Write to the heartbeat file if we haven't already done so within the
* timeout and start or reset a timer that keeps running as long as there is
* activity. Failures are logged as warnings.
*/
public
beat
():
void
{
if
(
!
this
.
alive
())
{
logger
.
trace
(
"
heartbeat
"
)
fs
.
outputFile
(
this
.
heartbeatPath
,
""
).
catch
((
error
)
=>
{
logger
.
warn
(
error
.
message
)
})
this
.
lastHeartbeat
=
Date
.
now
()
if
(
typeof
this
.
heartbeatTimer
!==
"
undefined
"
)
{
clearTimeout
(
this
.
heartbeatTimer
)
}
this
.
heartbeatTimer
=
setTimeout
(()
=>
{
this
.
isActive
()
.
then
((
active
)
=>
{
if
(
active
)
{
this
.
beat
()
}
})
.
catch
((
error
)
=>
{
logger
.
warn
(
error
.
message
)
})
},
this
.
heartbeatInterval
)
}
}
}
export
interface
HttpProvider0
<
T
>
{
new
(
options
:
HttpProviderOptions
):
T
}
...
...
test/update.test.ts
浏览文件 @
2928d362
...
...
@@ -3,12 +3,11 @@ import * as fs from "fs-extra"
import
*
as
http
from
"
http
"
import
*
as
path
from
"
path
"
import
{
LatestResponse
,
UpdateHttpProvider
}
from
"
../src/node/app/update
"
import
{
AuthType
}
from
"
../src/node/
http
"
import
{
AuthType
}
from
"
../src/node/
cli
"
import
{
SettingsProvider
,
UpdateSettings
}
from
"
../src/node/settings
"
import
{
tmpdir
}
from
"
../src/node/util
"
describe
(
"
update
"
,
()
=>
{
return
describe
.
skip
(
"
update
"
,
()
=>
{
let
version
=
"
1.0.0
"
let
spy
:
string
[]
=
[]
const
server
=
http
.
createServer
((
request
:
http
.
IncomingMessage
,
response
:
http
.
ServerResponse
)
=>
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录