添加注册功能

This commit is contained in:
muqing 2024-08-16 18:09:19 +08:00
parent acb2ed64d0
commit c155980947
8 changed files with 270 additions and 143 deletions

View File

@ -1,15 +1,25 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Principal;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using RustTools.muqing;
using RustTools.Views;
namespace RustTools.ApiFox;
#pragma warning disable CS8981 // 该类型名称仅包含小写 ascii 字符。此类名称可能会成为该语言的保留值。
#pragma warning disable IDE1006 // 命名样式
public class user
{
/// <summary>
/// 登陆
/// </summary>
/// <param name="account"></param>
/// <param name="passWord"></param>
/// <returns></returns>
public static async Task<string> loginPc(string account, string passWord)
{
var pattern = @"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$";
@ -17,20 +27,57 @@ public class user
//gj.sc(account + " " + v); //这里不知道为什么会出现 True 而不是 true 导致识别邮箱失败
var task = await wl.postAsync("/php/user.php?action=loginPc", new string[][]
{
new string[]{ "account",account},
new string[]{ "passWord", passWord },
new string[]{ "isEmail", v.ToString().ToLower() }
new[]{ "account",account},
new[]{ "passWord", passWord },
new[]{ "isEmail", v.ToString().ToLower() }
});
return task;
}
/// <summary>
/// 获取信息
/// </summary>
/// <param name="account"></param>
/// <returns></returns>
public static async Task<string> SpaceInfo(string account)
{
var pattern = @"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$";
var v = Regex.IsMatch(account, pattern);
var task = await wl.postAsync("/php/user.php?action=getSpaceInfo", new string[][]
{
new string[]{ "account",account}
new[]{ "account",account}
});
return task;
}
/// <summary>
/// 注册
/// </summary>
/// <param name="account"></param>
/// <param name="email"></param>
/// <param name="passWord"></param>
/// <param name="userName"></param>
/// <returns></returns>
public static async Task<string> register(string account,string userName,string passWord,string email)
{
var task = await wl.postAsync("/php/user.php?action=register", new string[][]
{
new []{ "account",account},
new []{ "userName", userName },
new []{ "passWord", passWord },
new []{ "email", email },
new []{ "appID",gj.GetUUID()}
});
return task;
}
public static async Task<string> enableAccount(string account, string key)
{
var task = await wl.postAsync("/php/user.php?action=enableAccount", new string[][]
{
new []{ "account",account},
new []{ "key", key }
});
return task;
}
}

View File

@ -1,8 +1,11 @@

## 开始使用
如果你的电脑是win10+可以使用Visual Studio或Visual Studio Code 来运行此源码。
Windows10系统版本以上
Visual Studio Code
Visual Studio
JetBrains Rider
## 发布和安装
在VS 2022上面运行此源码后选择证书签名打包后.msix文件点击运行如果提示证书问题请双击.cer文件<br>
在Visual Studio上面运行此源码后选择证书签名,打包后.msix文件点击运行如果提示证书问题请双击.cer文件<br>
点击安装证书,储存位置选择本地计算机 选择自定义储存为 受信任的根证书颁发机构 下一步保存即可
## 注意事项
@ -27,32 +30,16 @@ WinUI还是比较冷门的一个技术,代码和例子都不多 关于编译器
其实开发电脑版是作者对于铁锈的热爱开发的,请大家多多支持,开发不易。
## 反馈
我们目前没有写反馈的接口和功能 你可以加群 点击链接加入群聊【铁锈助手】https://qm.qq.com/q/dUfOK04pj2 在此反馈
## 特别鸣谢 (参与项目开发)
<div style=" display: inline-block;
text-align: center;
margin: 6px;
padding: 9px;
background-color: #f5f5f5;
border: 1px solid #ddd;
border-radius: 10px;
width: 100px;
height: 100px;
box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.1);">
<a href="https://github.com/Cold-Mint/">
<img src="http://q1.qlogo.cn/g?b=qq&nk=2923268971&s=100" style ="
<a href="https://github.com/Cold-Mint/">
<img src="https://q1.qlogo.cn/g?b=qq&nk=2923268971&s=100" style ="
border-radius: 50%;
width: 66px;
height: 66px;"/>
</a>
<p style="
margin-top: 5px;
font-size: 16px;
color: #333;">薄荷</p>
</div>
height: 66px;" alt="薄荷"/>
</a>
## 开源协议
虽然没什么用但还是要写一写

View File

@ -91,7 +91,7 @@
<Button
Name="ZenrollButton"
Margin="0,0,0,0"
Click="ZenrollButton_Click"
Click="enroll_Button_Click"
Content="注册"
IsEnabled="False" />
</StackPanel>

View File

@ -10,7 +10,7 @@ namespace RustTools.Themes;
public sealed partial class LoginPage : UserControl
{
public delegate void LoginSucceededEventHandler(object sender, string e);
public event LoginSucceededEventHandler LoginSucceeded;
public event LoginSucceededEventHandler? LoginSucceeded;
public LoginPage()
{
InitializeComponent();
@ -26,29 +26,12 @@ public sealed partial class LoginPage : UserControl
ZpasswordBox.PasswordChanged += ZPasswordBox_PasswordChanged;
ZpasswordyesBox.PasswordChanged += ZPasswordBox_PasswordChanged;
}
ZaccountBox.Text = "muqing1";
ZnameBox.Text = "muqing153";
ZpasswordBox.Password = "123456";
ZpasswordBox.Password= "123456";
ZemialBox.Text="123456@qq.com";
private void AgreementCheck_Checked(object sender, RoutedEventArgs e)
{
loginButton.IsEnabled = loginButtonIsEnabled;
}
private void PasswordBox_PasswordChanged(object sender, RoutedEventArgs e)
{
loginButton.IsEnabled = loginButtonIsEnabled;
}
private void ZAgreementCheck_Checked(object sender, RoutedEventArgs e)
{
ZenrollButton.IsEnabled = ZenrollButtonIsEnabled;
}
private void ZPasswordBox_PasswordChanged(object sender, RoutedEventArgs e)
{
ZenrollButton.IsEnabled = ZenrollButtonIsEnabled;
}
private void AccountBox_TextChanged(object sender, TextChangedEventArgs e){
loginButton.IsEnabled = loginButtonIsEnabled;
}
/// <summary>
@ -121,15 +104,25 @@ public sealed partial class LoginPage : UserControl
/// <param name="e"></param>
private async void login_Click(object sender, RoutedEventArgs e)
{
try
{
Toast.IsOpen = false;
var v = await user.loginPc(accountBox.Text, passwordBox.Password);
var message = JsonConvert.DeserializeObject<Message>(v);
if (message != null)
{
if (message.message.Equals("请先激活您的账户"))
{
await enableAccountDialog(accountBox.Text);
return;
}
if (message.code == 0)
{
Toast.Title = "提示";
Toast.Subtitle = message.message;
Toast.IsOpen = true;
await Task.Delay(500);
Toast.IsOpen = false;
if (message.data != null)
{
// 登录成功,触发事件
@ -150,22 +143,114 @@ public sealed partial class LoginPage : UserControl
}
gj.sc(v);
}
public void login()
catch (Exception ex)
{
gj.sc(ex);
}
}
private void ZenrollButton_Click(object sender, RoutedEventArgs e)
/// <summary>
/// 注册
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public async void enroll_Button_Click(object sender, RoutedEventArgs e)
{
if (ZpasswordBox.Password != ZpasswordyesBox.Password)
{
Toast.Title = "警告";
Toast.Subtitle = "密码不一致";
Toast.IsOpen = true;
await Task.Delay(1000);
Toast.IsOpen = false;
return;
}
try
{
var v = await user.register(ZaccountBox.Text, ZnameBox.Text, ZpasswordBox.Password, ZemialBox.Text);
gj.sc(v);
var message = JsonConvert.DeserializeObject<Message>(v);
if (message.code == 0)
{
Toast.Title = "提示";
Toast.Subtitle = message.message;
Toast.IsOpen = true;
CreateFadeTransitionStoryboard(enroll_view, login_view).Begin();
accountBox.Text=ZaccountBox.Text;
passwordBox.Password = ZpasswordBox.Password;
await enableAccountDialog(ZaccountBox.Text);
await Task.Delay(1000);
Toast.IsOpen = false;
}
}catch (Exception ex)
{
Toast.Title = "警告";
Toast.Subtitle = ex.Message;
Toast.IsOpen = true;
await Task.Delay(1000);
Toast.IsOpen = false;
}
}
/// <summary>
/// 激活弹窗
/// </summary>
/// <param name="account"></param>
/// <returns></returns>
private async Task enableAccountDialog(string account)
{
var textBox = new TextBox()
{
PlaceholderText = "激活码一般都在邮箱当中",
MaxLength=6,
};
var contentDialog = new ContentDialog()
{
XamlRoot = Content.XamlRoot,
Title ="激活码",
Content =textBox,
PrimaryButtonText = "确定",
PrimaryButtonStyle= Application.Current.Resources["AccentButtonStyle"] as Style,
CloseButtonText = "取消"
};
var result =await contentDialog.ShowAsync();
if (result == ContentDialogResult.Primary)
{
gj.sc(textBox.Text);
var v = await user.enableAccount(account, textBox.Text);
var message = JsonConvert.DeserializeObject<Message>(v);
if (message != null)
{
Toast.Title = "提示";
Toast.Subtitle = message.message;
Toast.IsOpen = true;
await Task.Delay(1000);
Toast.IsOpen = false;
}
}
}
private void AgreementCheck_Checked(object sender, RoutedEventArgs e)
{
loginButton.IsEnabled = loginButtonIsEnabled;
}
private void PasswordBox_PasswordChanged(object sender, RoutedEventArgs e)
{
loginButton.IsEnabled = loginButtonIsEnabled;
}
private void ZAgreementCheck_Checked(object sender, RoutedEventArgs e)
{
ZenrollButton.IsEnabled = ZenrollButtonIsEnabled;
}
private void ZPasswordBox_PasswordChanged(object sender, RoutedEventArgs e)
{
ZenrollButton.IsEnabled = ZenrollButtonIsEnabled;
}
private void AccountBox_TextChanged(object sender, TextChangedEventArgs e)
{
loginButton.IsEnabled = loginButtonIsEnabled;
}
}

View File

@ -41,41 +41,5 @@ public class ModuleViewModel : ObservableRecipient
}
}
public async void Button_Rwmod(object sender, RoutedEventArgs e)
{
var menuItem = sender as MenuFlyoutItem;
if (menuItem != null)
{
if (menuItem.DataContext is DataObject folderItem)
{
var filepath = Path.Combine(Path.GetDirectoryName(folderItem.Dri), folderItem.Name + ".rwmod");
if (File.Exists(filepath))
{
var show = await new ContentDialog()
{
XamlRoot = menuItem.XamlRoot,
Title = "警告",
Content = "已经存在必须覆盖",
PrimaryButtonText = "确定",
SecondaryButtonText = "取消"
}.ShowAsync();
if (show == ContentDialogResult.Primary)
{
}
else
{
return;
}
}
// 压缩zip
var v = wj.ZipExample(folderItem.Dri, folderItem.Name + ".rwmod");
if (v != string.Empty)
{
ListMod.Remove(new DataObject(new FileInfo(filepath)));
ListMod.Insert(0, new DataObject(new FileInfo(v)));
}
}
}
}
}

View File

@ -7,6 +7,7 @@
xmlns:local="using:RustTools.Views"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:themes="using:RustTools.Themes"
d:DataContext="{d:DesignInstance Type=local:ModulePage}"
mc:Ignorable="d">
<Page.Resources>
@ -55,7 +56,7 @@
<Button.Flyout>
<MenuFlyout>
<MenuFlyoutItem Text="打开" />
<MenuFlyoutItem Click="ViewModel.Button_Rwmod" Text="打包" />
<MenuFlyoutItem Click="Button_Rwmod" Text="打包" />
<MenuFlyoutItem Text="发布" />
<MenuFlyoutItem Click="Button_Delete" Text="删除" />
</MenuFlyout>

View File

@ -82,13 +82,12 @@ public sealed partial class ModulePage : Page
InitializeComponent();
}
//private void ShowMenu(bool isTransient, GridViewItem dataTemplate)
//{
// FlyoutShowOptions myOption = new FlyoutShowOptions();
// myOption.ShowMode = isTransient ? FlyoutShowMode.Transient : FlyoutShowMode.Standard;
// CommandBarFlyout1.ShowAt(dataTemplate, myOption);
//}
/// <summary>
/// 打开模组
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Button_Click(object sender, RoutedEventArgs e)
{
var button = sender as Button;
@ -104,6 +103,13 @@ public sealed partial class ModulePage : Page
}
}
}
/// <summary>
/// 删除模组和文件夹
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Button_Delete(object sender, RoutedEventArgs e)
{
var menuItem = sender as Control;
@ -128,6 +134,12 @@ public sealed partial class ModulePage : Page
}
/// <summary>
/// 解压模组
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private async void Button_Click_RwmodItem(object sender, RoutedEventArgs e)
{
ContentDialog dialog = new ContentDialog();
@ -146,7 +158,7 @@ public sealed partial class ModulePage : Page
var container = VisualTreeHelper.GetParent(button) as FrameworkElement;
if (container != null && container.DataContext is DataObject dataItem)
{
CheckBox checkbox = (dialog.Content as StackPanel)?.Children[1] as CheckBox;
var checkbox = (dialog.Content as StackPanel)?.Children[1] as CheckBox;
if (checkbox.IsChecked == true)
{
File.Delete(dataItem.Dri);
@ -183,13 +195,56 @@ public sealed partial class ModulePage : Page
{
Text = "解压模组到目录",
};
var stackPanel = new StackPanel();
stackPanel.Children.Add(text);
stackPanel.Children.Add(checkbox);
return stackPanel;
}
/// <summary>
/// 打包模组
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public async void Button_Rwmod(object sender, RoutedEventArgs e)
{
var menuItem = sender as MenuFlyoutItem;
if (menuItem != null)
{
if (menuItem.DataContext is DataObject folderItem)
{
var filepath = Path.Combine(Path.GetDirectoryName(folderItem.Dri), folderItem.Name + ".rwmod");
if (File.Exists(filepath))
{
var show = await new ContentDialog()
{
XamlRoot = menuItem.XamlRoot,
Title = "警告",
Content = "已经存在必须覆盖",
PrimaryButtonText = "确定",
SecondaryButtonText = "取消"
}.ShowAsync();
if (show == ContentDialogResult.Primary)
{
}
else
{
return;
}
}
// 压缩zip
var v = wj.ZipExample(folderItem.Dri, folderItem.Name + ".rwmod");
if (v != string.Empty)
{
ViewModel.ListMod.Remove(new DataObject(new FileInfo(filepath)));
ViewModel.ListMod.Insert(0, new DataObject(new FileInfo(v)));
}
}
}
}
}
public class MyItemTemplateSelector : DataTemplateSelector
{

View File

@ -24,27 +24,15 @@ public class gj
public static string GetUUID()
{
try
{
using var searcher = new ManagementObjectSearcher("select UUID from Win32_ComputerSystemProduct");
foreach (var obj in searcher.Get().Cast<ManagementObject>())
{
return obj["UUID"] != null ? (string)obj["UUID"] : "";
}
}
catch (Exception ex)
{
Console.WriteLine($"An error occurred while retrieving the UUID: {ex.Message}");
}
return string.Empty;
var newGuid = Guid.NewGuid();
return newGuid.ToString();
}
/// <summary>
/// 设置window窗口适配器 主题颜色
/// </summary>
public static async void SetBackTheme(WindowEx windowEx)
public static void SetBackTheme(WindowEx windowEx)
{
var iniHelper = new IniHelper();
iniHelper.Load(IniHelper.FILE.Config);