mirror of
https://github.com/FastTunnel/FastTunnel.git
synced 2025-02-08 02:39:29 +08:00
记录登录历史,可快捷登录
This commit is contained in:
parent
4fb74f7f64
commit
f899be5dc2
|
@ -249,28 +249,35 @@ namespace FastTunnel.Core.Core
|
|||
new SocketSwap(connecter_ssh.Socket, localConnecter_ssh.Socket).StartSwap();
|
||||
break;
|
||||
case MessageType.Log:
|
||||
var msg = (Msg.Content as JObject).ToObject<LogMsg>();
|
||||
|
||||
switch (msg.MsgType)
|
||||
try
|
||||
{
|
||||
case LogMsgType.Info:
|
||||
_logger.LogInformation("From Server:" + msg.Msg);
|
||||
break;
|
||||
case LogMsgType.Error:
|
||||
_logger.LogError("From Server:" + msg.Msg);
|
||||
break;
|
||||
case LogMsgType.Debug:
|
||||
_logger.LogDebug("From Server:" + msg.Msg);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
var msg = (Msg.Content as JObject).ToObject<LogMsg>();
|
||||
|
||||
switch (msg.MsgType)
|
||||
{
|
||||
case LogMsgType.Info:
|
||||
_logger.LogInformation("From Server:" + msg.Msg);
|
||||
break;
|
||||
case LogMsgType.Error:
|
||||
_logger.LogError("From Server:" + msg.Msg);
|
||||
break;
|
||||
case LogMsgType.Debug:
|
||||
_logger.LogDebug("From Server:" + msg.Msg);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex);
|
||||
}
|
||||
|
||||
break;
|
||||
case MessageType.C_SwapMsg:
|
||||
case MessageType.C_LogIn:
|
||||
default:
|
||||
throw new Exception("参数异常");
|
||||
_logger.LogError($"未处理的消息:{Msg.MessageType} {Msg.Content}");
|
||||
break;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
|
|
@ -9,13 +9,19 @@ using Newtonsoft.Json.Linq;
|
|||
using NLog;
|
||||
using SuiDao.Client.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net.Sockets;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
|
||||
namespace SuiDao.Client
|
||||
{
|
||||
class Program
|
||||
{
|
||||
const string KeyLogName = ".key";
|
||||
|
||||
/// <summary>
|
||||
/// suidao.io 客户端
|
||||
/// </summary>
|
||||
|
@ -26,7 +32,42 @@ namespace SuiDao.Client
|
|||
var logger = LogManager.GetCurrentClassLogger();
|
||||
logger.Debug("===== SuiDao Client Start =====");
|
||||
|
||||
string key = string.Empty;
|
||||
List<string> keys = new List<string>();
|
||||
using (var reader = new StreamReader(Path.Combine(AppContext.BaseDirectory, KeyLogName)))
|
||||
{
|
||||
while (!reader.EndOfStream)
|
||||
{
|
||||
var line = reader.ReadLine();
|
||||
if (!string.IsNullOrEmpty(line))
|
||||
{
|
||||
keys.Add(line);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
keys = keys.Distinct().ToList();
|
||||
if (keys.Count > 0)
|
||||
{
|
||||
Console.WriteLine("请选择要启动的客户端:" + Environment.NewLine);
|
||||
|
||||
Console.WriteLine($"0:其他密钥登录");
|
||||
for (int i = 0; i < keys.Count; i++)
|
||||
{
|
||||
Console.WriteLine($"{i + 1}:{keys[i]}");
|
||||
}
|
||||
|
||||
Console.WriteLine(Environment.NewLine + "输入编号回车键继续:");
|
||||
|
||||
HandleNum(keys, logger);
|
||||
return;
|
||||
}
|
||||
|
||||
NewKey(logger);
|
||||
}
|
||||
|
||||
private static void NewKey(ILogger logger)
|
||||
{
|
||||
string key;
|
||||
while (true)
|
||||
{
|
||||
Console.Write("请输入登录密钥:");
|
||||
|
@ -40,12 +81,53 @@ namespace SuiDao.Client
|
|||
break;
|
||||
}
|
||||
|
||||
Console.WriteLine("登陆中...");
|
||||
LogByKey(key, logger, true);
|
||||
}
|
||||
|
||||
private static void HandleNum(List<string> keys, ILogger logger)
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
var str = Console.ReadLine();
|
||||
if (string.IsNullOrEmpty(str))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
int index;
|
||||
if (!int.TryParse(str, out index))
|
||||
{
|
||||
Console.WriteLine("输入错误 请重新选择");
|
||||
continue;
|
||||
}
|
||||
|
||||
if (index < 0 || index > keys.Count)
|
||||
{
|
||||
Console.WriteLine("输入错误 请重新选择");
|
||||
continue;
|
||||
}
|
||||
|
||||
if (index == 0)
|
||||
{
|
||||
NewKey(logger);
|
||||
}
|
||||
else
|
||||
{
|
||||
LogByKey(keys[index - 1], logger, false);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private static void LogByKey(string key, ILogger logger, bool log)
|
||||
{
|
||||
Console.WriteLine("登录中...");
|
||||
|
||||
try
|
||||
{
|
||||
var servicesProvider = new Host().Config(Config).Build();
|
||||
Run(servicesProvider, logger, key);
|
||||
Run(servicesProvider, logger, key, log);
|
||||
|
||||
while (true)
|
||||
{
|
||||
|
@ -65,12 +147,18 @@ namespace SuiDao.Client
|
|||
}
|
||||
}
|
||||
|
||||
private static void Run(IServiceProvider servicesProvider, ILogger _logger, string key)
|
||||
private static void Run(IServiceProvider servicesProvider, ILogger _logger, string key, bool log)
|
||||
{
|
||||
var res = HttpHelper.PostAsJson("https://api1.suidao.io/api/Client/GetServerByKey", $"{{ \"key\":\"{key}\"}}").Result;
|
||||
var jobj = JObject.Parse(res);
|
||||
if ((bool)jobj["success"] == true)
|
||||
{
|
||||
// 记录登录记录
|
||||
if (log)
|
||||
{
|
||||
AppendTextToFile(Path.Combine(AppContext.BaseDirectory, KeyLogName), Environment.NewLine + key);
|
||||
}
|
||||
|
||||
var server = jobj["data"].ToObject<SuiDaoServerConfig>();
|
||||
|
||||
var client = servicesProvider.GetRequiredService<FastTunnelClient>();
|
||||
|
@ -83,7 +171,6 @@ namespace SuiDao.Client
|
|||
try
|
||||
{
|
||||
_client = new Connecter(server.ip, server.bind_port);
|
||||
|
||||
_client.Connect();
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
@ -101,6 +188,7 @@ namespace SuiDao.Client
|
|||
}
|
||||
else
|
||||
{
|
||||
// TODO: 重新输入
|
||||
Console.WriteLine(jobj["errorMsg"].ToString());
|
||||
}
|
||||
}
|
||||
|
@ -109,5 +197,19 @@ namespace SuiDao.Client
|
|||
{
|
||||
service.AddTransient<FastTunnelClient>();
|
||||
}
|
||||
|
||||
public static void AppendTextToFile(string filename, string inputStr)
|
||||
{
|
||||
var dir = Path.GetDirectoryName(filename);
|
||||
if (!Directory.Exists(dir))
|
||||
Directory.CreateDirectory(dir);
|
||||
|
||||
using (FileStream fsw = new FileStream(filename, FileMode.Append))
|
||||
{
|
||||
byte[] writeBytes = Encoding.UTF8.GetBytes(inputStr);
|
||||
fsw.Write(writeBytes, 0, writeBytes.Length);
|
||||
fsw.Close();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -58,6 +58,7 @@ namespace SuiDao.Server
|
|||
{
|
||||
service.AddTransient<FastTunnelServer>()
|
||||
.AddSingleton<ServerConfig>(implementationFactory)
|
||||
.AddSingleton<LoginHandler>()
|
||||
.AddTransient<IConfigHandler, SuiDaoLoginHandler>();
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user