Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- os.pullEvent = os.pullEventRaw
- local modem = peripheral.find("modem")
- local event, side, sChannel, id, data, dist
- local sessions = {}
- modem.open(os.getComputerID())
- local function send(to, msg)
- modem.transmit(to, os.getComputerID(), msg);
- end
- local function listen()
- event, side, sChannel, id, data, dist = os.pullEvent("modem_message")
- end
- local function receive()
- modem.close(os.getComputerID())
- local rand = math.random(60000, 65000)
- modem.transmit(id, rand)
- modem.open(rand)
- listen()
- modem.close(rand)
- modem.open(os.getComputerID())
- end
- local function getSID()
- local rand = math.random(0, 10000)
- for index, tmp in pairs(sessions) do
- if tmp == rand then
- return getSID()
- end
- end
- return rand
- end
- local function indexOf(table, val)
- for index, tmp in pairs(table) do
- if tmp == val then
- return index
- end
- end
- return nil
- end
- local function login()
- receive()
- if not data:find(":") then
- send(id, "MessageFormatException")
- return
- end
- local c = data:find(":")
- local user = data:sub(0, c - 1)
- local pass = data:sub(c + 1)
- local file = fs.open("user/" .. user, "r")
- if file ~= nil then
- if pass == file.readLine() then
- local sid = getSID()
- sessions[user] = sid;
- if fs.exists("admin/" .. user) then
- send(id, "Login Successful:" .. sid .. ":")
- else
- send(id, "Login Successful:" .. sid)
- end
- else
- send(id, "Password Incorrect")
- end
- file.close()
- else
- send(id, "Unknown User")
- end
- end
- local function balance()
- receive()
- local user = indexOf(sessions, tonumber(data))
- if user == nil then
- return
- end
- local file = fs.open("$/" .. user, "r")
- send(id, file.readLine())
- file.close()
- end
- local function transfer()
- receive()
- if not data:find(":") then
- send(id, "MessageFormatException")
- return
- end
- local c1 = data:find(":")
- local c2 = data:find(":", c1 + 1)
- local user1 = indexOf(sessions, tonumber(data:sub(0, c1 - 1)))
- if user1 == nil then
- return
- end
- local user2 = data:sub(c1 + 1, c2 - 1)
- local amt = tonumber(data:sub(c2 + 1))
- local f1 = fs.open("$/" .. user1, "r")
- local f2 = fs.open("$/" .. user2, "r")
- if f1 ~= nil and f2 ~= nil then
- local bal1 = tonumber(f1.readLine());
- local bal2 = tonumber(f2.readLine());
- if bal1 >= amt and amt > 0 then
- f1.close()
- f2.close()
- f1 = fs.open("$/" .. user1, "w")
- f2 = fs.open("$/" .. user2, "w")
- f1.write(bal1 - amt)
- f2.write(bal2 + amt)
- f1.close()
- f2.close()
- send(id, "Funds Transfered")
- else
- send(id, "Not enough funds or invalid amount")
- end
- else
- send(id, "User(s) Not Found")
- end
- end
- local function create()
- receive()
- if not data:find(":") then
- send(id, "MessageFormatException")
- return
- end
- local c = data:find(":")
- local user = data:sub(0, c - 1)
- local pass = data:sub(c + 1)
- if fs.exists("user/" .. user) then
- send(id, "User Exists")
- else
- local file = fs.open("user/" .. user, "w")
- file.write(pass)
- file.close()
- file = fs.open("$/" .. user, "w")
- file.write("0")
- file.close()
- send(id, "Account Created")
- end
- end
- local function add()
- receive()
- if not data:find(":") then
- send(id, "MessageFormatException")
- return
- end
- local c1 = data:find(":")
- local c2 = data:find(":", c1 + 1)
- local user1 = indexOf(sessions, tonumber(data:sub(0, c1 - 1)))
- if user1 == nil then
- return
- end
- local user2 = data:sub(c1 + 1, c2 - 1)
- local amt = tonumber(data:sub(c2 + 1))
- if fs.exists("admin/" .. user1) then
- if fs.exists("user/".. user2) then
- local file = fs.open("$/" .. user2, "r")
- local bal = tonumber(file.readLine())
- file.close()
- bal = bal + amt
- file = fs.open("$/" .. user2, "w")
- file.write(bal)
- file.close()
- send(id, "$" .. amt .. " added to " .. user2)
- else
- send(id, "No Such User")
- end
- else
- send(id, "You are not an admin")
- end
- end
- local function delete()
- receive()
- if not data:find(":") then
- send(id, "MessageFormatException")
- return
- end
- local c = data:find(":")
- local user1 = indexOf(sessions, tonumber(data:sub(0,c - 1)))
- if user1 == nil then
- return
- end
- if fs.exists("admin/" .. user1) then
- local user2 = data:sub(c + 1)
- fs.delete("user/" .. user2)
- fs.delete("$/" .. user2)
- fs.delete("admin/" .. user2)
- send(id, "User deleted")
- else
- send(id, "You are not an admin")
- end
- end
- local function chmod()
- receive()
- if not data:find(":") then
- send(id, "MessageFormatException")
- return
- end
- local c1 = data:find(":")
- local c2 = data:find(":", c1 + 1)
- local user1 = indexOf(sessions, tonumber(data:sub(0,c1 - 1)))
- if user1 == nil then
- return
- end
- if fs.exists("admin/" .. user1) then
- local user2 = data:sub(c1 + 1, c2 - 1)
- local status = data:sub(c2 + 1)
- if fs.exists("user/" .. user2) then
- if status == "true" then
- fs.open("admin/" .. user2, "w").close()
- else
- fs.delete("admin/" .. user2)
- end
- send(id, "User Status Successfully Edited")
- else
- send(id, "No such user")
- end
- else
- send(id, "You are not an admin")
- end
- end
- local function logout()
- receive()
- local user = indexOf(sessions, tonumber(data))
- if user == nil then
- return
- end
- sessions[user] = nil
- send(id, "You have been logged out!")
- end
- local function drawStart()
- term.clear()
- term.setCursorPos(1, 1)
- print("BlueBank Server 3.0 Status: Online")
- print("--------------------------------------")
- while true do
- listen()
- if data == "login" then
- login()
- elseif data == "balance" then
- balance()
- elseif data == "transfer" then
- transfer()
- elseif data == "create" then
- create()
- elseif data == "delete" then
- delete()
- elseif data == "rename" then
- rename()
- elseif data == "passcode" then
- passcode()
- elseif data == "add" then
- add()
- elseif data == "auth" then
- auth()
- elseif data == "logout" then
- logout()
- elseif data == "chmod" then
- chmod()
- else
- send(id, "Command Not Found")
- end
- end
- end
- drawStart()
Add Comment
Please, Sign In to add comment