L2 Account Master
Information:
L2 Account Master is an application that can help you create or update accounts on your server easily.
The algorithm for password encoding of the accounts is embedded into the application.
You can also update the accounts with the new password just with a single click.
Its also a great replacement for the normal SQLAccountManager script.
Many new features are coming.
Screenshots:
Downloads:
Download
Source:
Imports L2_Account_Master.IniFile
Imports System.Security.Cryptography
Public Class Form1
Private version As String = "0.3beta"
Private title As String = "L2 Account Master " & version
Private Connection As New MySql.Data.MySqlClient.MySqlConnection
Private Command As New MySql.Data.MySqlClient.MySqlCommand
Private Adapter As New MySql.Data.MySqlClient.MySqlDataAdapter
Private config As String = Application.StartupPath & "\config.ini"
Private connectionstring As String
Public Function RecreateINI()
If IO.File.Exists(config) Then
Else
IO.File.CreateText(config)
End If
End Function
Private Function Encode(ByVal value As String) As String
Dim sha As SHA1 = New SHA1Managed()
Dim encDataByte As Byte() = New Byte(value.Length - 1) {}
Return Convert.ToBase64String(sha.ComputeHash(System.Text.Encoding.UTF8.GetBytes(value)))
End Function
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.Text = title
Command.Connection = Connection
End Sub
Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged
If CheckBox1.Checked = True Then
TextBox9.PasswordChar = Nothing
Else
TextBox9.PasswordChar = "*"
End If
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
If Connection.State = ConnectionState.Open Then
mysqlconnstatus.Text = "Active"
mysqlconnstatus.ForeColor = Color.Green
ToolStripStatusLabel2.Visible = False
Button6.Enabled = False
Else
Button6.Enabled = True
ToolStripStatusLabel2.Visible = True
mysqlconnstatus.Text = "Inactive"
mysqlconnstatus.ForeColor = Color.Red
End If
End Sub
Private Sub ToolStripStatusLabel2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripStatusLabel2.Click
TabControl1.SelectedTab() = TabControl1.TabPages(2)
End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
If IO.File.Exists(config) Then
Dim ini As New IniFile(config)
TextBox7.Text = ini.GetString("MySQL", "Hostname", "")
TextBox8.Text = ini.GetString("MySQL", "Username", "")
TextBox9.Text = ini.GetString("MySQL", "Password", "")
TextBox10.Text = ini.GetString("MySQL", "Database", "")
Else
RecreateINI()
Dim ini As New IniFile(config)
ini.WriteString("MySQL", "Hostname", TextBox7.Text)
ini.WriteString("MySQL", "Username", TextBox8.Text)
ini.WriteString("MySQL", "Password", TextBox9.Text)
ini.WriteString("MySQL", "Database", TextBox10.Text)
End If
End Sub
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
If IO.File.Exists(config) Then
Dim ini As New IniFile(config)
ini.WriteString("MySQL", "Hostname", TextBox7.Text)
ini.WriteString("MySQL", "Username", TextBox8.Text)
ini.WriteString("MySQL", "Password", TextBox9.Text)
ini.WriteString("MySQL", "Database", TextBox10.Text)
Else
RecreateINI()
Dim ini As New IniFile(config)
ini.WriteString("MySQL", "Hostname", TextBox7.Text)
ini.WriteString("MySQL", "Username", TextBox8.Text)
ini.WriteString("MySQL", "Password", TextBox9.Text)
ini.WriteString("MySQL", "Database", TextBox10.Text)
End If
End Sub
Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
connectionstring = "Server=" & TextBox7.Text & ";Database=" & TextBox10.Text & ";Uid=" & TextBox8.Text & ";Pwd=" & TextBox9.Text & ";"
Connection.ConnectionString = connectionstring
Try
Connection.Open()
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
TextBox1.Clear()
TextBox2.Clear()
TextBox3.Clear()
End Sub
Private Sub TabPage3_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TabPage3.Enter
If IO.File.Exists(config) Then
Dim ini As New IniFile(config)
TextBox7.Text = ini.GetString("MySQL", "Hostname", "")
TextBox8.Text = ini.GetString("MySQL", "Username", "")
TextBox9.Text = ini.GetString("MySQL", "Password", "")
TextBox10.Text = ini.GetString("MySQL", "Database", "")
Else
RecreateINI()
Dim ini As New IniFile(config)
ini.WriteString("MySQL", "Hostname", TextBox7.Text)
ini.WriteString("MySQL", "Username", TextBox8.Text)
ini.WriteString("MySQL", "Password", TextBox9.Text)
ini.WriteString("MySQL", "Database", TextBox10.Text)
End If
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If TextBox2.Text = TextBox3.Text Then
Command.CommandText = "INSERT INTO `accounts` (`login`, `password`, `lastactive`, `accessLevel`, `lastIP`, `lastServer`) VALUES ('" & TextBox1.Text & "', '" & Encode(TextBox2.Text) & "', '1', '0', '0.0.0.0', '1')"
MsgBox("Account created!")
Try
Command.BeginExecuteNonQuery()
Catch ex As Exception
MsgBox(ex.Message)
End Try
Else
MsgBox("The two passwords don't match!", MsgBoxStyle.Critical)
End If
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
If TextBox4.Text = TextBox5.Text Then
Command.CommandText = "UPDATE `accounts` SET `password`='" & Encode(TextBox5.Text) & "' WHERE (`login`='" & TextBox6.Text & "')"
MsgBox("Account updated!")
Try
Command.BeginExecuteNonQuery()
Catch ex As Exception
MsgBox(ex.Message)
End Try
Else
MsgBox("The two passwords don't match!", MsgBoxStyle.Critical)
End If
End Sub
Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click
TextBox4.Clear()
TextBox5.Clear()
TextBox6.Clear()
End Sub
End Class
Public Class IniFile
' API functions
Private Declare Ansi Function GetPrivateProfileString _
Lib "kernel32.dll" Alias "GetPrivateProfileStringA" _
(ByVal lpApplicationName As String, _
ByVal lpKeyName As String, ByVal lpDefault As String, _
ByVal lpReturnedString As System.Text.StringBuilder, _
ByVal nSize As Integer, ByVal lpFileName As String) _
As Integer
Private Declare Ansi Function WritePrivateProfileString _
Lib "kernel32.dll" Alias "WritePrivateProfileStringA" _
(ByVal lpApplicationName As String, _
ByVal lpKeyName As String, ByVal lpString As String, _
ByVal lpFileName As String) As Integer
Private Declare Ansi Function GetPrivateProfileInt _
Lib "kernel32.dll" Alias "GetPrivateProfileIntA" _
(ByVal lpApplicationName As String, _
ByVal lpKeyName As String, ByVal nDefault As Integer, _
ByVal lpFileName As String) As Integer
Private Declare Ansi Function FlushPrivateProfileString _
Lib "kernel32.dll" Alias "WritePrivateProfileStringA" _
(ByVal lpApplicationName As Integer, _
ByVal lpKeyName As Integer, ByVal lpString As Integer, _
ByVal lpFileName As String) As Integer
Dim strFilename As String
' Constructor, accepting a filename
Public Sub New(ByVal Filename As String)
strFilename = Filename
End Sub
' Read-only filename property
ReadOnly Property FileName() As String
Get
Return strFilename
End Get
End Property
Public Function GetString(ByVal Section As String, _
ByVal Key As String, ByVal [Default] As String) As String
' Returns a string from your INI file
Dim intCharCount As Integer
Dim objResult As New System.Text.StringBuilder(256)
intCharCount = GetPrivateProfileString(Section, Key, _
[Default], objResult, objResult.Capacity, strFilename)
If intCharCount > 0 Then GetString = objResult.ToString
End Function
Public Function GetInteger(ByVal Section As String, _
ByVal Key As String, ByVal [Default] As Integer) As Integer
' Returns an integer from your INI file
Return GetPrivateProfileInt(Section, Key, _
[Default], strFilename)
End Function
Public Function GetBoolean(ByVal Section As String, _
ByVal Key As String, ByVal [Default] As Boolean) As Boolean
' Returns a boolean from your INI file
Return (GetPrivateProfileInt(Section, Key, _
CInt([Default]), strFilename) = 1)
End Function
Public Sub WriteString(ByVal Section As String, _
ByVal Key As String, ByVal Value As String)
' Writes a string to your INI file
WritePrivateProfileString(Section, Key, Value, strFilename)
Flush()
End Sub
Public Sub WriteInteger(ByVal Section As String, _
ByVal Key As String, ByVal Value As Integer)
' Writes an integer to your INI file
WriteString(Section, Key, CStr(Value))
Flush()
End Sub
Public Sub WriteBoolean(ByVal Section As String, _
ByVal Key As String, ByVal Value As Boolean)
' Writes a boolean to your INI file
WriteString(Section, Key, CStr(CInt(Value)))
Flush()
End Sub
Private Sub Flush()
' Stores all the cached changes to your INI file
FlushPrivateProfileString(0, 0, 0, strFilename)
End Sub
End Class
Encryption part:
Private Function Encode(ByVal value As String) As String
Dim sha As SHA1 = New SHA1Managed()
Dim encDataByte As Byte() = New Byte(value.Length - 1) {}
Return Convert.ToBase64String(sha.ComputeHash(System.Text.Encoding.UTF8.GetBytes(value)))
End Function