222 lines
7.3 KiB
VB.net
222 lines
7.3 KiB
VB.net
Imports Newtonsoft.Json
|
||
|
||
Public Class BFrmLogin
|
||
|
||
' TODO: 插入代码,以使用提供的用户名和密码执行自定义的身份验证
|
||
' (请参阅 https://go.microsoft.com/fwlink/?LinkId=35339)。
|
||
' 随后自定义主体可附加到当前线程的主体,如下所示:
|
||
' My.User.CurrentPrincipal = CustomPrincipal
|
||
' 其中 CustomPrincipal 是用于执行身份验证的 IPrincipal 实现。
|
||
' 随后,My.User 将返回 CustomPrincipal 对象中封装的标识信息
|
||
' 如用户名、显示名等
|
||
|
||
''' <summary>是否记住密码</summary>
|
||
Private _isRecordPassWord As Boolean
|
||
|
||
''' <summary>是否自动登录</summary>
|
||
Private _isAutoLogin As Boolean
|
||
|
||
''' <summary>是否正在登录中</summary>
|
||
Private _isLogging As Boolean
|
||
|
||
''' <summary>产品索引</summary>
|
||
Private _appid As Integer = 6 'BLV_Studio = 6
|
||
'CSerialConfigTools = 1
|
||
'Face server = 2
|
||
'auth server = 3
|
||
'blv_oa.com = 4
|
||
'RCU_MAC binding = 5
|
||
'BLV_Studio = 6
|
||
|
||
Private Sub FrmLogin_Load(sender As Object, e As EventArgs) Handles Me.Load
|
||
LoadSettings()
|
||
|
||
Try
|
||
TxtUserName.ForeColor = Color.FromArgb(0, 155, 134)
|
||
TxtUserName.Text = Aes128.DecryptStr(My.Settings.UserAccount, Aes128.ServerAesKey)
|
||
Catch ex As Exception
|
||
|
||
|
||
' TxtUserName.Text = String.Empty
|
||
End Try
|
||
|
||
Try
|
||
|
||
TxtPwd.ForeColor = Color.FromArgb(0, 155, 134)
|
||
TxtPwd.Text = Aes128.DecryptStr(My.Settings.UserPassword, Aes128.ServerAesKey)
|
||
Catch ex As Exception
|
||
|
||
'TxtPwd.Text = String.Empty
|
||
End Try
|
||
TxtUserName_Leave(Nothing, Nothing)
|
||
TxtPwd_Leave(Nothing, Nothing)
|
||
ChkAutoLogin.Checked = _isAutoLogin
|
||
ChkRecordPwd.Checked = _isRecordPassWord
|
||
|
||
Text = $"{Application.ProductName} {Application.ProductVersion}"
|
||
End Sub
|
||
|
||
Private Sub LoginForm_Shown(sender As Object, e As EventArgs) Handles Me.Shown
|
||
If _isAutoLogin Then
|
||
TmrAutoLogin.Start()
|
||
End If
|
||
End Sub
|
||
|
||
Private Sub FrmLogin_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
|
||
SaveSettings()
|
||
End Sub
|
||
|
||
Private Sub BtnLogin_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnLogin.Click
|
||
CloseAutoLogin()
|
||
If _isLogging Then Return
|
||
_isLogging = True
|
||
BtnLogin.BackgroundImage = BLV_Studio.My.Resources.Resources._6
|
||
|
||
Dim user As String = TxtUserName.Text
|
||
Dim pwd As String = TxtPwd.Text
|
||
Try
|
||
CheckUserAccount(user)
|
||
CheckUserPassword(pwd)
|
||
Dim login As LoginReturn = GetAccountAuth(user, pwd, _appid)
|
||
|
||
'显示
|
||
Dim frm As New FrmMain
|
||
frm.Account = user
|
||
frm.Pawss = pwd
|
||
frm.AccountAuth = login.Data
|
||
frm.Show()
|
||
|
||
'关闭窗体
|
||
Me.Close()
|
||
Catch ex As Exception
|
||
MsgBox(ex.Message, MsgBoxStyle.OkOnly, "登录失败")
|
||
BtnLogin.BackgroundImage = BLV_Studio.My.Resources.Resources._5
|
||
End Try
|
||
|
||
_isLogging = False
|
||
End Sub
|
||
|
||
Private Function GetAccountAuth(user As String, pwd As String, appid As Integer) As LoginReturn
|
||
Dim jsonString As String = HttpMothod.PostData("http://auth.blv-oa.com/OTApi/Login", $"Uid={user}&Pwd={pwd}&appid={_appid}")
|
||
If String.IsNullOrWhiteSpace(jsonString) Then Throw New Exception($"用户鉴权异常,请联系管理员")
|
||
|
||
Dim login As LoginReturn = JsonConvert.DeserializeObject(Of LoginReturn)(jsonString)
|
||
If login Is Nothing Then Throw New Exception($"解析用户权限错误!")
|
||
|
||
If login.Status <> 200 Then Throw New Exception($"Status: {login.Status} Msg:{login.Message}")
|
||
|
||
Return login
|
||
End Function
|
||
|
||
Private Sub BtnCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnCancel.Click
|
||
Me.Close()
|
||
End Sub
|
||
|
||
|
||
''' <summary>记住密码复选框状态修改触发事件</summary>
|
||
Private Sub ChkKeepPwd_CheckedChanged(sender As Object, e As EventArgs) Handles ChkRecordPwd.CheckedChanged
|
||
_isRecordPassWord = ChkRecordPwd.Checked
|
||
End Sub
|
||
|
||
''' <summary>自动登录复选框状态修改触发事件</summary>
|
||
Private Sub Chk_AutoLogin_CheckedChanged(sender As Object, e As EventArgs) Handles ChkAutoLogin.CheckedChanged
|
||
_isAutoLogin = ChkAutoLogin.Checked
|
||
End Sub
|
||
|
||
Private Sub TxtPwd_TextChanged(sender As Object, e As EventArgs) Handles TxtUserName.TextChanged, TxtPwd.TextChanged
|
||
CloseAutoLogin()
|
||
End Sub
|
||
|
||
Private Sub LoginForm_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
|
||
SaveSettings()
|
||
End Sub
|
||
|
||
Private Sub TmrAutoLogin_Tick(sender As Object, e As EventArgs) Handles TmrAutoLogin.Tick
|
||
If String.IsNullOrEmpty(TxtUserName.Text) Then Return
|
||
|
||
' BtnLogin.PerformClick()
|
||
End Sub
|
||
|
||
|
||
Private Sub CheckUserAccount(userAccount As String)
|
||
If String.IsNullOrWhiteSpace(userAccount) Then
|
||
Throw New Exception($"请输入用户账号!")
|
||
End If
|
||
End Sub
|
||
|
||
Private Sub CheckUserPassword(userPassword As String)
|
||
If String.IsNullOrWhiteSpace(userPassword) Then
|
||
Throw New Exception($"请输入密码!")
|
||
End If
|
||
End Sub
|
||
|
||
|
||
''' <summary>读取Setting中的缓存量</summary>
|
||
Private Sub LoadSettings()
|
||
My.Settings.Reload() '读取Setting中的内容
|
||
_isAutoLogin = False ' My.Settings.IsAutoLogin
|
||
_isRecordPassWord = My.Settings.IsRecordPassWord
|
||
End Sub
|
||
|
||
''' <summary>保存Setting中的缓存量</summary>
|
||
Private Sub SaveSettings()
|
||
My.Settings.IsAutoLogin = _isAutoLogin
|
||
My.Settings.IsRecordPassWord = _isRecordPassWord
|
||
|
||
If _isRecordPassWord Then
|
||
My.Settings.UserAccount = Aes128.EncryptStr(TxtUserName.Text, Aes128.ServerAesKey)
|
||
My.Settings.UserPassword = Aes128.EncryptStr(TxtPwd.Text, Aes128.ServerAesKey)
|
||
Else
|
||
My.Settings.UserAccount = String.Empty
|
||
My.Settings.UserPassword = String.Empty
|
||
End If
|
||
My.Settings.Save()
|
||
End Sub
|
||
|
||
|
||
|
||
Private Sub CloseAutoLogin()
|
||
If TmrAutoLogin.Enabled Then
|
||
TmrAutoLogin.Stop()
|
||
Text = $"{My.Application.Info.ProductName} Login [Auto Login Cancelled...]"
|
||
End If
|
||
End Sub
|
||
|
||
|
||
|
||
Private Sub TxtPwd_Enter(sender As Object, e As EventArgs) Handles TxtPwd.Enter
|
||
If (TxtPwd.Text.Trim().Equals("请输入密码")) Then
|
||
TxtPwd.Text = ""
|
||
End If
|
||
|
||
End Sub
|
||
|
||
Private Sub TxtUserName_Enter(sender As Object, e As EventArgs) Handles TxtUserName.Enter
|
||
If (TxtUserName.Text.Trim().Equals("请输入账号")) Then
|
||
TxtUserName.Text = ""
|
||
End If
|
||
End Sub
|
||
|
||
Private Sub TxtUserName_Leave(sender As Object, e As EventArgs) Handles TxtUserName.Leave
|
||
'TxtUserName.ForeColor = Color.Black
|
||
If (String.IsNullOrWhiteSpace(TxtUserName.Text)) Then
|
||
TxtUserName.ForeColor = Color.FromArgb(0, 155, 134)
|
||
TxtUserName.Text = "请输入账号"
|
||
End If
|
||
|
||
|
||
|
||
End Sub
|
||
|
||
Private Sub TxtPwd_Leave(sender As Object, e As EventArgs) Handles TxtPwd.Leave
|
||
'TxtPwd.ForeColor = Color.Black
|
||
TxtPwd.PasswordChar = "*"
|
||
If (String.IsNullOrWhiteSpace(TxtPwd.Text)) OrElse TxtUserName.Text.Trim().Equals("请输入账号") Then
|
||
TxtPwd.ForeColor = Color.FromArgb(0, 155, 134)
|
||
TxtPwd.PasswordChar = String.Empty
|
||
TxtPwd.Text = "请输入密码"
|
||
|
||
End If
|
||
End Sub
|
||
End Class
|