mirror of
https://github.com/openziti/desktop-edge-win.git
synced 2026-09-25 04:12:02 +00:00
311 lines
8.6 KiB
C#
311 lines
8.6 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
|
|
/// <summary>
|
|
/// These classes represent the data structures that are passed back and forth
|
|
/// between the service and the client.
|
|
/// </summary>
|
|
namespace ZitiDesktopEdge.DataStructures {
|
|
public enum LogLevelEnum {
|
|
FATAL = 0,
|
|
ERROR = 1,
|
|
WARN = 2,
|
|
INFO = 3,
|
|
DEBUG = 4,
|
|
VERBOSE = 5,
|
|
TRACE = 6,
|
|
}
|
|
|
|
public class SvcResponse
|
|
{
|
|
public int Code { get; set; }
|
|
public string Message { get; set; }
|
|
public string Error { get; set; }
|
|
|
|
override public string ToString()
|
|
{
|
|
return $"Code: {Code}\nMessage: {Message}\nError: {Error}";
|
|
}
|
|
}
|
|
|
|
public class StatusUpdateResponse : SvcResponse
|
|
{
|
|
public StatusUpdate Payload { get; set; }
|
|
}
|
|
|
|
public class StatusUpdate
|
|
{
|
|
public string Operation { get; set; }
|
|
public TunnelStatus Status { get; set; }
|
|
|
|
public Identity NewIdentity { get; set; }
|
|
}
|
|
|
|
public class NewIdentity
|
|
{
|
|
public EnrollmentFlags Flags { get; set; }
|
|
public Identity Id { get; set; }
|
|
}
|
|
|
|
public class IdentityResponse : SvcResponse
|
|
{
|
|
public Identity Payload { get; set; }
|
|
}
|
|
|
|
public class ServiceFunction
|
|
{
|
|
public string Function { get; set; }
|
|
}
|
|
|
|
public class FingerprintFunction : ServiceFunction
|
|
{
|
|
public FingerprintPayload Payload { get; set; }
|
|
}
|
|
|
|
public class BooleanPayload
|
|
{
|
|
public bool OnOff { get; set; }
|
|
}
|
|
|
|
public class BooleanFunction : ServiceFunction
|
|
{
|
|
public BooleanFunction(string functionName, bool theBool)
|
|
{
|
|
this.Function = functionName;
|
|
this.Payload = new BooleanPayload() { OnOff = theBool };
|
|
}
|
|
public BooleanPayload Payload { get; set; }
|
|
}
|
|
|
|
public class IdentityTogglePayload
|
|
{
|
|
public bool OnOff { get; set; }
|
|
public string Fingerprint { get; set; }
|
|
}
|
|
public class SetLogLevelPayload
|
|
{
|
|
public string Level { get; set; }
|
|
}
|
|
|
|
public class IdentityToggleFunction : ServiceFunction
|
|
{
|
|
public IdentityToggleFunction(string fingerprint, bool theBool)
|
|
{
|
|
this.Function = "IdentityOnOff";
|
|
this.Payload = new IdentityTogglePayload()
|
|
{
|
|
OnOff = theBool,
|
|
Fingerprint = fingerprint
|
|
};
|
|
}
|
|
public IdentityTogglePayload Payload { get; set; }
|
|
}
|
|
|
|
public class SetLogLevelFunction : ServiceFunction {
|
|
public SetLogLevelFunction(string level) {
|
|
this.Function = "SetLogLevel";
|
|
this.Payload = new SetLogLevelPayload() {
|
|
Level = level
|
|
};
|
|
}
|
|
public SetLogLevelPayload Payload { get; set; }
|
|
}
|
|
|
|
public class ZitiDumpFunction : ServiceFunction {
|
|
public ZitiDumpFunction(string level) {
|
|
this.Function = "ZitiDump";
|
|
//this.Payload = null;//nothing for now
|
|
}
|
|
//public SetLogLevelPayload Payload { get; set; }
|
|
}
|
|
|
|
public class FingerprintPayload
|
|
{
|
|
public string Fingerprint { get; set; }
|
|
}
|
|
|
|
public class Id
|
|
{
|
|
public string key { get; set; }
|
|
public string cert { get; set; }
|
|
}
|
|
|
|
public class Config
|
|
{
|
|
public string ztAPI { get; set; }
|
|
public Id id { get; set; }
|
|
public object configTypes { get; set; }
|
|
}
|
|
|
|
public class Metrics
|
|
{
|
|
public int TotalBytes { get; set; }
|
|
public long Up { get; set; }
|
|
public long Down { get; set; }
|
|
}
|
|
|
|
public class Identity
|
|
{
|
|
public string Name { get; set; }
|
|
public string FingerPrint { get; set; }
|
|
public bool Active { get; set; }
|
|
public Config Config { get; set; }
|
|
public string Status { get; set; }
|
|
public List<Service> Services { get; set; }
|
|
public Metrics Metrics { get; set; }
|
|
public string ControllerVersion { get; set; }
|
|
}
|
|
public class Service
|
|
{
|
|
public string Name { get; set; }
|
|
public string InterceptHost { get; set; }
|
|
public UInt16 InterceptPort { get; set; }
|
|
public bool OwnsIntercept { get; set; }
|
|
public string AssignedIP { get; set; }
|
|
}
|
|
|
|
public class EnrollmentFlags
|
|
{
|
|
public string JwtString { get; set; }
|
|
public string CertFile { get; set; }
|
|
public string KeyFile { get; set; }
|
|
public string AdditionalCAs { get; set; }
|
|
}
|
|
|
|
public class IpInfo
|
|
{
|
|
public string Ip { get; set; }
|
|
public string Subnet { get; set; }
|
|
public UInt16 MTU { get; set; }
|
|
public string DNS { get; set; }
|
|
}
|
|
|
|
public class ServiceVersion
|
|
{
|
|
public string Version { get; set; }
|
|
public string Revision { get; set; }
|
|
public string BuildDate { get; set; }
|
|
|
|
public override string ToString()
|
|
{
|
|
return $"Version: {Version}, Revision: {Revision}, BuildDate: {BuildDate}";
|
|
}
|
|
}
|
|
|
|
public class ZitiTunnelStatus : SvcResponse
|
|
{
|
|
public TunnelStatus Status { get; set; }
|
|
}
|
|
|
|
public class TunnelStatus
|
|
{
|
|
public bool Active { get; set; }
|
|
|
|
public long Duration { get; set; }
|
|
|
|
public List<Identity> Identities { get; set; }
|
|
|
|
public IpInfo IpInfo { get; set; }
|
|
|
|
public string LogLevel { get; set; }
|
|
|
|
public ServiceVersion ServiceVersion { get; set; }
|
|
|
|
public void Dump(System.IO.TextWriter writer)
|
|
{
|
|
try {
|
|
writer.WriteLine($"Tunnel Active: {Active}");
|
|
writer.WriteLine($" LogLevel : {LogLevel}");
|
|
writer.WriteLine($" EvaluatedLogLevel: {EvaluateLogLevel()}");
|
|
foreach (Identity id in Identities) {
|
|
writer.WriteLine($" FingerPrint: {id.FingerPrint}");
|
|
writer.WriteLine($" Name : {id.Name}");
|
|
writer.WriteLine($" Active : {id.Active}");
|
|
writer.WriteLine($" Status : {id.Status}");
|
|
writer.WriteLine($" Services:");
|
|
if (id.Services != null)
|
|
{
|
|
foreach (Service s in id?.Services)
|
|
{
|
|
writer.WriteLine($" Name: {s.Name} HostName: {s.InterceptHost} Port: {s.InterceptPort}");
|
|
}
|
|
}
|
|
writer.WriteLine("=============================================");
|
|
}
|
|
} catch (Exception e) {
|
|
if (writer!=null) writer.WriteLine(e.ToString());
|
|
}
|
|
|
|
}
|
|
|
|
public LogLevelEnum EvaluateLogLevel()
|
|
{
|
|
try
|
|
{
|
|
LogLevelEnum l = (LogLevelEnum) Enum.Parse(typeof(LogLevelEnum), LogLevel.ToUpper());
|
|
return l;
|
|
}
|
|
catch
|
|
{
|
|
return LogLevelEnum.INFO;
|
|
}
|
|
}
|
|
}
|
|
|
|
public class ServiceException : System.Exception
|
|
{
|
|
public ServiceException(string Message, int Code, string AdditionalInfo) : base(Message)
|
|
{
|
|
this.Code = Code;
|
|
this.AdditionalInfo = AdditionalInfo;
|
|
}
|
|
|
|
public int Code { get; }
|
|
public string AdditionalInfo { get; }
|
|
}
|
|
|
|
public class StatusEvent
|
|
{
|
|
public string Op { get; set; }
|
|
}
|
|
|
|
public class ActionEvent : StatusEvent
|
|
{
|
|
public string Action { get; set; }
|
|
}
|
|
|
|
public class TunnelStatusEvent : StatusEvent
|
|
{
|
|
public TunnelStatus Status { get; set; }
|
|
public int ApiVersion { get; set; }
|
|
}
|
|
|
|
public class MetricsEvent : StatusEvent
|
|
{
|
|
public List<Identity> Identities { get; set; }
|
|
}
|
|
|
|
public class ServiceEvent : ActionEvent
|
|
{
|
|
public string Fingerprint { get; set; }
|
|
public Service Service { get; set; }
|
|
}
|
|
|
|
public class IdentityEvent : ActionEvent
|
|
{
|
|
public Identity Id { get; set; }
|
|
}
|
|
|
|
public class MonitorServiceStatusEvent : SvcResponse {
|
|
public string Status { get; set; }
|
|
public string ReleaseStream { get; set; }
|
|
|
|
public bool IsStopped() {
|
|
return "Stopped" == this.Status;
|
|
}
|
|
}
|
|
|
|
public class StatusCheck : MonitorServiceStatusEvent {
|
|
public bool UpdateAvailable { get; set; }
|
|
}
|
|
} |