Scoopta

BlueBank Server

May 16th, 2016
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. --os.pullEvent = os.pullEventRaw CC bug makes this break
  2.  
  3. local modem = peripheral.find("modem")
  4. local event, side, sChannel, id, data, dist
  5. local sessions = {}
  6.  
  7. modem.open(os.getComputerID())
  8.  
  9. local function send(to, msg)
  10.   modem.transmit(to, os.getComputerID(), msg);
  11. end
  12.  
  13. local function listen()
  14.   event, side, sChannel, id, data, dist = os.pullEvent("modem_message")
  15. end
  16.  
  17. local function receive()
  18.   modem.close(os.getComputerID())
  19.   local rand = math.random(60000, 65000)
  20.   modem.transmit(id, rand)
  21.   modem.open(rand)
  22.   listen()
  23.   modem.close(rand)
  24.   modem.open(os.getComputerID())
  25. end
  26.  
  27. local function getSID()
  28.   local rand = math.random(0, 10000)
  29.   for index, tmp in pairs(sessions) do
  30.     if tmp == rand then
  31.       return getSID()
  32.     end
  33.   end
  34.   return rand
  35. end
  36.  
  37. local function indexOf(table, val)
  38.   for index, tmp in pairs(table) do
  39.     if tmp == val then
  40.       return index
  41.     end
  42.   end
  43.   return nil
  44. end
  45.  
  46. local function login()
  47.   receive()
  48.   if not data:find(":") then
  49.     send(id, "MessageFormatException")
  50.     return
  51.   end
  52.   local c = data:find(":")
  53.   local user = data:sub(0, c - 1)
  54.   local pass = data:sub(c + 1)
  55.   local file = fs.open("user/" .. user,  "r")
  56.   if file ~= nil then
  57.     if pass == file.readLine() then
  58.       local sid = getSID()
  59.       sessions[user] = sid;
  60.       if fs.exists("admin/" .. user) then
  61.         send(id, "Login Successful:" .. sid .. ":")
  62.       else
  63.         send(id, "Login Successful:" .. sid)
  64.       end
  65.     else
  66.       send(id, "Password Incorrect")
  67.     end
  68.     file.close()
  69.   else
  70.     send(id, "Unknown User")
  71.   end
  72. end
  73.  
  74. local function balance()
  75.   receive()
  76.   local user = indexOf(sessions, tonumber(data))
  77.   if user == nil then
  78.     return
  79.   end
  80.   local file = fs.open("$/" .. user,  "r")
  81.   send(id, file.readLine())
  82.   file.close()
  83. end
  84.  
  85. local function transfer()
  86.   receive()
  87.   if not data:find(":") then
  88.     send(id, "MessageFormatException")
  89.     return
  90.   end
  91.   local c1 = data:find(":")
  92.   local c2 = data:find(":", c1 + 1)
  93.   local user1 = indexOf(sessions, tonumber(data:sub(0, c1 - 1)))
  94.   if user1 == nil then
  95.     return
  96.   end
  97.   local user2 = data:sub(c1 + 1, c2 - 1)
  98.   local amt = tonumber(data:sub(c2 + 1))
  99.   local f1 = fs.open("$/" .. user1, "r")
  100.   local f2 = fs.open("$/" .. user2, "r")
  101.   if f1 ~= nil and f2 ~= nil then
  102.     local bal1 = tonumber(f1.readLine());
  103.     local bal2 = tonumber(f2.readLine());
  104.     if bal1 >= amt and amt > 0 then
  105.       f1.close()
  106.       f2.close()
  107.       f1 = fs.open("$/" .. user1, "w")
  108.       f2 = fs.open("$/" .. user2, "w")
  109.       f1.write(bal1 - amt)
  110.       f2.write(bal2 + amt)
  111.       f1.close()
  112.       f2.close()
  113.       send(id, "Funds Transfered")
  114.     else
  115.       send(id, "Not enough funds or invalid amount")
  116.     end
  117.   else
  118.     send(id, "User(s) Not Found")
  119.   end
  120. end
  121.  
  122. local function create()
  123.   receive()
  124.   if not data:find(":") then
  125.     send(id, "MessageFormatException")
  126.     return
  127.   end
  128.   local c = data:find(":")
  129.   local user = data:sub(0, c - 1)
  130.   local pass = data:sub(c + 1)
  131.   if fs.exists("user/" .. user) then
  132.     send(id, "User Exists")
  133.   else
  134.     local file = fs.open("user/" .. user,  "w")
  135.     file.write(pass)
  136.     file.close()
  137.     file = fs.open("$/" .. user, "w")
  138.     file.write("0")
  139.     file.close()
  140.     send(id, "Account Created")
  141.   end
  142. end
  143.  
  144. local function add()
  145.   receive()
  146.   if not data:find(":") then
  147.     send(id, "MessageFormatException")
  148.     return
  149.   end
  150.   local c1 = data:find(":")
  151.   local c2 = data:find(":", c1 + 1)
  152.   local user1 = indexOf(sessions, tonumber(data:sub(0, c1 - 1)))
  153.   if user1 == nil then
  154.     return
  155.   end
  156.   local user2 = data:sub(c1 + 1, c2 - 1)
  157.   local amt = tonumber(data:sub(c2 + 1))
  158.   if fs.exists("admin/" .. user1) then
  159.     if fs.exists("user/".. user2) then
  160.       local file = fs.open("$/" .. user2, "r")
  161.       local bal = tonumber(file.readLine())
  162.       file.close()
  163.       bal = bal + amt
  164.       file = fs.open("$/" .. user2, "w")
  165.       file.write(bal)
  166.       file.close()
  167.       send(id, "$" .. amt .. " added to " .. user2)
  168.     else
  169.       send(id, "No Such User")    
  170.     end
  171.   else
  172.     send(id, "You are not an admin")      
  173.   end
  174. end
  175.  
  176. local function delete()
  177.   receive()
  178.   if not data:find(":") then
  179.     send(id, "MessageFormatException")
  180.     return
  181.   end
  182.   local c = data:find(":")
  183.   local user1 = indexOf(sessions, tonumber(data:sub(0, c - 1)))
  184.   if user1 == nil then
  185.     return
  186.   end
  187.   if fs.exists("admin/" .. user1) then
  188.     local user2 = data:sub(c + 1)
  189.     fs.delete("user/" .. user2)
  190.     fs.delete("$/" .. user2)
  191.     fs.delete("admin/" .. user2)
  192.     send(id, "User deleted")
  193.   else
  194.     send(id, "You are not an admin")
  195.   end
  196. end
  197.  
  198. local function chmod()
  199.   receive()
  200.   if not data:find(":") then
  201.     send(id, "MessageFormatException")
  202.     return
  203.   end
  204.   local c1 = data:find(":")
  205.   local c2 = data:find(":", c1 + 1)
  206.   local user1 = indexOf(sessions, tonumber(data:sub(0, c1 - 1)))
  207.   if user1 == nil then
  208.     return
  209.   end
  210.   if fs.exists("admin/" .. user1) then
  211.     local user2 = data:sub(c1 + 1, c2 - 1)
  212.     local status = data:sub(c2 + 1)
  213.     if fs.exists("user/" .. user2) then
  214.       if status == "true" then
  215.         fs.open("admin/" .. user2, "w").close()
  216.       else
  217.         fs.delete("admin/" .. user2)
  218.       end
  219.     send(id, "User Status Successfully Edited")
  220.     else
  221.       send(id, "No such user")
  222.     end
  223.   else
  224.     send(id, "You are not an admin")
  225.   end
  226.  
  227. end
  228.  
  229. local function logout()
  230.   receive()
  231.   local user = indexOf(sessions, tonumber(data))
  232.   if user == nil then
  233.     return
  234.   end
  235.   sessions[user] = nil
  236.   send(id, "You have been logged out!")
  237. end
  238.  
  239. local function drawStart()
  240.   term.clear()
  241.   term.setCursorPos(1, 1)
  242.   print("BlueBank Server 3.0 Status: Online")
  243.   print("--------------------------------------")
  244.   while true do
  245.     listen()
  246.     if data == "login" then
  247.       login()
  248.     elseif data == "balance" then
  249.       balance()
  250.     elseif data == "transfer" then
  251.       transfer()
  252.     elseif data == "create" then
  253.       create()
  254.     elseif data == "delete" then
  255.       delete()
  256.     elseif data == "rename" then
  257.       rename()
  258.     elseif data == "passcode" then
  259.       passcode()
  260.     elseif data == "add" then
  261.       add()
  262.     elseif data == "auth" then
  263.       auth()
  264.     elseif data == "logout" then
  265.       logout()
  266.     elseif data == "chmod" then
  267.     chmod()
  268.   else
  269.       send(id, "Command Not Found")
  270.     end
  271.   end
  272. end
  273.  
  274. drawStart()
Add Comment
Please, Sign In to add comment