1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
|
do return end
--[=[
--[[
Some values that need to be setup by the server owner
]]
local aes = include("aes.lua")
local ECBMode = include("lockbox/ecb.lua")
local ZeroPadding = include("lockbox/padding.lua")
local Array = include("lockbox/array.lua")
local Stream = include("lockbox/stream.lua")
print("sh_setup included aes successfully")
local valuesneeded = {
["mysql DB host"] = "String",
["mysql DB dbname"] = "String",
["mysql DB uname"] = "String",
["mysql DB pass"] = "String",
["mysql should encrypt pass"] = "Bool",
["mysql encrypt password"] = "String",
["world default server ip:port"] = "String",
}
ART.Config = ART.Config or {}
if SERVER then
util.AddNetworkString( "ART_CONFIG_WRITE" )
local function ReadConfig(encryptkey)
encryptkey = encryptkey or ""
local ftext = file.Read("artery/config.txt", "DATA")
if ftext == nil then
print("Failed to read Config file, if this is a new setup, use art_setup to get started.")
return
end
local tbl = string.Explode("\n",ftext,false)
local strtbl = {}
for k,v in pairs(tbl) do
local ltext = v:Explode(":",false)
strtbl[ltext[1]] = ltext[2]
end
for k,v in pairs(valuesneeded) do
local tfunc = "to" .. v:lower()
ART.Config[k] = _G[tfunc](strtbl[k])
end
if ART.Config["mysql should encrypt pass"] then
if encryptkey == "" then
print("Failed to retrive MySQL database password, please enter it with the \"artery_dbpasswordkey\" command.")
return
end
ART.Config["mysql DB pass"] = aes.decrypt(lockstream.fromString(encryptkey),lockstream.fromString(ART.Config["mysql DB pass"]))
end
end
ReadConfig()
net.Receive( "ART_CONFIG_MYSQLPASS", function(len,ply)
if not ply:IsAdmin() then
return
end
end)
net.Receive( "ART_CONFIG_WRITE", function(len,ply)
print("Received write signal")
if not ply:IsAdmin() then return end
print("You're an admin!")
for k,v in pairs(valuesneeded) do
local ftype = "Read" .. v
ART.Config[k] = net[ftype]()
end
if ART.Config["mysql should encrypt pass"] then
local key = ART.Config["mysql encrypt password"]
local block = ART.Config["mysql DB pass"]
local akey = Array.fromString(key)
local ablock = Array.fromString(block)
local skey = Stream.fromString(key)
local sblock = Stream.fromString(block)
--print("sblock:" .. sblock)
--print("skey:" .. skey)
local cipher = ECBMode.Cipher().setKey(akey).setBlockCipher(aes).setPadding(ZeroPadding)
local ciphertxt = cipher.init().update(sblock).finish().asHex()
local decipher = ECBMode.Decipher().setKey(akey).setBlockCipher(aes).setPadding(ZeroPadding)
local deciphertxt = decipher.init().update(Stream.fromHex(ciphertxt)).finish().asHex()
print("Cyphertext of " .. block .. " is " .. ciphertxt)
print("Deciphertext of " .. ciphertxt .. " is " .. deciphertxt)
ART.Config["mysql DB pass"] = ciphertxt
end
local ftext = {}
for k,v in pairs(ART.Config) do
ftext[#ftext + 1] = k .. "=" .. tostring(v)
end
local wtext = table.concat(ftext,"\n")
print("Writeing:" .. wtext)
file.Write("artery/config.txt",wtext)
end)
net.Receive( "ART_CONFIG_REQUEST", function(len,ply)
if not ply:IsAdmin() then return end
for k,v in pairs(valuesneeded) do
local ftype = "Write" .. v
print("Calling " .. ftype .. " on " .. tostring(tbl[k]))
net[ftype](tbl[k])
end
end)
end
print("Got to before concommands were added")
concommand.Add("artery_dbpasswordkey",function()
if CLIENT then return end
end, nil, "Sets the encryption key for the mysql database password")
if CLIENT then
print("Got to before setup command")
concommand.Add("artery_setup", function(ply,cmd,args)
print("setup called")
if SERVER then return end
print("Got past server gaurd")
local width = ScrW()
local height = ScrH()
local configpanel = vgui.Create( "DFrame" )
configpanel:SetPos( 0, height/8 )
configpanel:SetSize( width/4, (height/4)*3 )
configpanel:SetTitle( "Artery Settings" )
configpanel:SetDraggable( true )
configpanel:MakePopup()
local scrollpanel = vgui.Create( "DScrollPanel", configpanel )
scrollpanel:Dock(FILL)
local entries = {}
for k,v in pairs(valuesneeded) do
local settinglabel = vgui.Create( "DLabel", scrollpanel )
settinglabel:Dock(TOP)
settinglabel:SetText( k )
scrollpanel:AddItem(settinglabel)
local settingentry
if v == "String" then
settingentry = vgui.Create( "DTextEntry", scrollpanel )
settingentry:SetSize(width/10,18)
settingentry:Dock(TOP)
elseif v == "Bool" then
settingentry = vgui.Create( "DCheckBox", holder)
settingentry:Dock(TOP)
--settingentry:SetSize(18,18)
end
scrollpanel:AddItem(settingentry)
entries[k] = settingentry
end
local savebutton = vgui.Create( "DButton",scrollpanel )
savebutton.DoClick = function()
net.Start( "ART_CONFIG_WRITE")
for k,v in pairs(valuesneeded) do
local nfunc = "Write"..v
local value = nil
if v == "String" then value = entries[k]:GetValue()
elseif v == "Bool" then value = entries[k]:GetChecked() end
assert(value ~= nil, "Didn't know setting type:" .. v .. " for " .. k)
print("Doing " .. nfunc .. " on " .. tostring(value))
net[nfunc](value)
end
net.SendToServer()
end
savebutton:SetText("Save config")
savebutton:Dock(TOP)
scrollpanel:AddItem(savebutton)
end)
end
]=]
|