diff options
Diffstat (limited to 'gamemode/shared/sh_setup.lua')
| -rw-r--r-- | gamemode/shared/sh_setup.lua | 165 |
1 files changed, 165 insertions, 0 deletions
diff --git a/gamemode/shared/sh_setup.lua b/gamemode/shared/sh_setup.lua new file mode 100644 index 0000000..9c44e57 --- /dev/null +++ b/gamemode/shared/sh_setup.lua @@ -0,0 +1,165 @@ +--[[ + 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 |
