记录登录历史,可快捷登录

This commit is contained in:
SpringHgui 2020-04-08 13:08:33 +08:00
parent 4fb74f7f64
commit f899be5dc2
3 changed files with 131 additions and 21 deletions

View File

@ -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)

View File

@ -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();
}
}
}
}

View File

@ -58,6 +58,7 @@ namespace SuiDao.Server
{
service.AddTransient<FastTunnelServer>()
.AddSingleton<ServerConfig>(implementationFactory)
.AddSingleton<LoginHandler>()
.AddTransient<IConfigHandler, SuiDaoLoginHandler>();
}