Return the session token in the login response instead of a cookie, and accept it as a Bearer token without CSRF.
127 lines
5.2 KiB
C#
127 lines
5.2 KiB
C#
using System.Text.Json;
|
||
|
||
namespace Monitor.Backend.Api;
|
||
|
||
/// <summary><c>return_session</c>:跨域的前端用——不设 Cookie,把会话令牌放在响应里,之后用 <c>Authorization: Bearer</c> 带上。</summary>
|
||
public sealed record LoginRequest(string Username, string Password, bool? ReturnSession);
|
||
|
||
public sealed record LoginResponse(string UserId, string Username, string CsrfToken, DateTimeOffset ExpiresAt, string? SessionToken);
|
||
|
||
public sealed record MeDto(string Kind, string Scope, string? UserId, string? Username, string? CsrfToken);
|
||
|
||
public sealed record LocalLimitsDto(double MaxTotalMbps, long MaxTotalPps, IReadOnlyList<string> AllowedTargetCidrs, int MaxConcurrentTests);
|
||
|
||
public sealed record RejectedDto(string Id, string Reason);
|
||
|
||
public sealed record HeartbeatDto(int Sessions, long PpsIn, long PpsOut, long DroppedInvalid, long DroppedRateLimited, long QueueBytes, DateTimeOffset At);
|
||
|
||
public sealed record AgentDto(
|
||
string Id,
|
||
string Name,
|
||
string Status,
|
||
bool Online,
|
||
bool ProbeConnected,
|
||
IReadOnlyList<ConnectedProbeDto> Probes,
|
||
HostDto? Host,
|
||
string PublicHost,
|
||
int ProbeTcpPort,
|
||
IReadOnlyList<int> ProbeUdpPorts,
|
||
IReadOnlyList<string> Labels,
|
||
bool PublicVisible,
|
||
IReadOnlyList<string> Kinds,
|
||
string? AgentVersion,
|
||
LocalLimitsDto? LocalLimits,
|
||
long TaskVersion,
|
||
long AppliedTaskVersion,
|
||
IReadOnlyList<RejectedDto> Rejected,
|
||
HeartbeatDto? Heartbeat,
|
||
int EndpointChanges,
|
||
DateTimeOffset CreatedAt,
|
||
DateTimeOffset? LastSeenAt);
|
||
|
||
/// <summary>merge-patch:缺省或为 null 的字段不修改。</summary>
|
||
public sealed record AgentPatchRequest(string? Name, IReadOnlyList<string>? Labels, string? PublicHost, bool? PublicVisible);
|
||
|
||
public sealed record JoinTokenDto(string Id, string? Note, IReadOnlyList<string> Labels, bool AutoApprove, int MaxUses, int Uses, DateTimeOffset ExpiresAt, DateTimeOffset? RevokedAt, DateTimeOffset CreatedAt);
|
||
|
||
public sealed record CreateJoinTokenRequest(string? Note, IReadOnlyList<string>? Labels, bool? AutoApprove, int? MaxUses, int? ExpiresInHours);
|
||
|
||
/// <summary>令牌明文只在创建的响应里出现一次。</summary>
|
||
public sealed record InstallCommandsDto(string Linux, string Macos, string Windows);
|
||
|
||
public sealed record CreatedJoinTokenDto(JoinTokenDto Token, string Plaintext, InstallCommandsDto InstallCommands);
|
||
|
||
/// <summary>Agent 眼中连着的一个 Probe(Agent 上报)。</summary>
|
||
public sealed record ConnectedProbeDto(string ProbeId, string? Version, string? Remote, DateTimeOffset ConnectedSince);
|
||
|
||
/// <summary>某个 Probe 现在连着的一个 Agent。</summary>
|
||
public sealed record ProbeConnectionDto(string AgentId, string AgentName, bool AgentOnline, string? Version, string? Remote, DateTimeOffset ConnectedSince);
|
||
|
||
public sealed record ProbeDto(string Id, string Name, DateTimeOffset CreatedAt, DateTimeOffset? RevokedAt, bool Revoked, IReadOnlyList<ProbeConnectionDto> Connections);
|
||
|
||
public sealed record BootstrapAgentDto(string AgentId, string Host, int TcpPort, string Spki);
|
||
|
||
public sealed record ProbeLimitsDto(double MaxTestMbps, long MaxTotalPps);
|
||
|
||
/// <summary><c>probe.json</c>:含私钥,只在生成时返回一次。</summary>
|
||
public sealed record ProbeIdentityDto(string ProbeId, string PrivateKey, IReadOnlyList<BootstrapAgentDto> Bootstrap, ProbeLimitsDto Limits);
|
||
|
||
public sealed record CreateProbeRequest(string? Name);
|
||
|
||
public sealed record PatchProbeRequest(string? Name);
|
||
|
||
public sealed record TaskDto(
|
||
string Id,
|
||
string Scope,
|
||
string? AgentId,
|
||
string? BaseTaskId,
|
||
string Kind,
|
||
string? Target,
|
||
IReadOnlyDictionary<string, JsonElement> Params,
|
||
string Schedule,
|
||
bool Enabled,
|
||
DateTimeOffset UpdatedAt);
|
||
|
||
public sealed record CreateTaskRequest(
|
||
string Scope,
|
||
string Kind,
|
||
string? Target,
|
||
Dictionary<string, JsonElement>? Params,
|
||
string? Schedule,
|
||
bool? Enabled,
|
||
string? AgentId,
|
||
string? BaseTaskId);
|
||
|
||
public sealed record PatchTaskRequest(Dictionary<string, JsonElement>? Params, string? Schedule, bool? Enabled, string? Target);
|
||
|
||
public sealed record StartTestRequestDto(string Plan, Dictionary<string, JsonElement>? Params);
|
||
|
||
public sealed record RawChunkMetaDto(
|
||
string ChunkId,
|
||
string AgentId,
|
||
string Series,
|
||
string Kind,
|
||
string? TaskId,
|
||
string? TestId,
|
||
int? Phase,
|
||
DateTimeOffset Start,
|
||
int DurationMs,
|
||
bool Partial,
|
||
int Bytes);
|
||
|
||
public sealed record ApiTokenDto(string Id, string Name, string Scope, DateTimeOffset CreatedAt, DateTimeOffset? LastUsedAt, DateTimeOffset? RevokedAt);
|
||
|
||
public sealed record CreateApiTokenRequest(string Name, string Scope);
|
||
|
||
public sealed record CreatedApiTokenDto(ApiTokenDto Token, string Plaintext);
|
||
|
||
public sealed record SettingDto(string Key, string Type, string Value, string Default, string Description);
|
||
|
||
public sealed record UserDto(string Id, string Username, DateTimeOffset CreatedAt);
|
||
|
||
public sealed record CreateUserRequest(string Username, string Password);
|
||
|
||
public sealed record ChangePasswordRequest(string Password);
|
||
|
||
public sealed record RecomputeDto(string State, IReadOnlyList<string> Metrics, long WindowsDone, long WindowsTotal, DateTimeOffset? From, DateTimeOffset? To, int QueueLength);
|