Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- if not fs.exists("crypt") then
- shell.run("pastebin get STRXsMfE crypt")
- end
- os.loadAPI("crypt")
- tArgs = {...}
- local h = fs.open("terminal.config", "r")
- config = textutils.unserialize(h.readAll())
- h.close()
- local xsize, ysize = term.getSize()
- if term.isColor() then
- green = colors.green
- blue = colors.blue
- red = colors.red
- else
- green = colors.gray
- blue = colors.lightGray
- red = colors.black
- end
- local mon = peripheral.find("monitor")
- mon.setTextScale(0.5)
- nfc = false
- for k,v in pairs(peripheral.getNames()) do
- if peripheral.getType(v) == "modem" and peripheral.call(v, "isWireless") == true then
- nfc = true
- end
- end
- local modem = peripheral.find("modem")
- function randomNumber()
- return tonumber(tostring({}):sub(8),16)
- end
- function getBasestation()
- local messg = {}
- messg["Protocol"] = "LTE"
- messg["Sender"] = os.getComputerID()..".bankomat.ctOS"
- messg["Receipient"] = "BROADCAST"
- messg["Request"] = "broadcast_station_ping"
- messg["LTE"] = {}
- messg["LTE"]["SI"] = "STATIC_TERMINAL"
- if not modem.isOpen(1800) then
- modem.open(1800)
- end
- local t = os.startTimer(2)
- local returns = nil
- local function a()
- modem.transmit(1800, 1800, messg)
- sleep(1)
- end
- local function b()
- while true do
- local sEvent, sModem, nChannel, nReplyChannel, tMessage = os.pullEvent()
- if sEvent == "modem_message" and type(tMessage) == "table" and tMessage["Receipient"] == os.getComputerID()..".bankomat.ctOS" and tMessage["Request"] == "broadcast_station_pingres" then
- os.cancelTimer(t)
- returns = tMessage["Sender"]
- return
- elseif sEvent == "timer" and sModem == t then
- term.redirect(mon)
- term.setBackgroundColor(colors.red)
- term.clear()
- term.setTextColor(colors.white)
- term.setCursorPos(5,5)
- term.write("Ausser")
- term.setCursorPos(5,6)
- term.write("Betrieb")
- sleep(5)
- os.reboot()
- return
- end
- end
- end
- parallel.waitForAny(a,b)
- return returns
- end
- function networkRegistration()
- local basestation = getBasestation()
- local packet = {}
- packet["Sender"] = os.getComputerID()..".bankomat.ctOS"
- packet["Receipient"] = basestation
- packet["Protocol"] = "LTE"
- packet["LTE"] = {}
- packet["LTE"]["Request"] = "LTE_CLIENT_REGISTER"
- packet["LTE"]["SI"] = "STATIC_TERMINAL"
- packet["LTE"]["Static"] = true
- packet["Data"] = crypt.encrypt("LTE_INTERN_HELLO", "STATIC_TERMINAL")
- modem.transmit(1800, 1800, packet)
- local timer = os.startTimer(5)
- while true do
- local event, p1, p2, p3, p4 = os.pullEvent()
- if event == "modem_message" and type(p4) == "table" and p4["Receipient"] == os.getComputerID()..".bankomat.ctOS" and p4["Sender"] == basestation and p4["LTE"]["Request"] == "LTE_CLIENT_WELCOME" then
- break
- elseif event == "timer" and p1 == timer then
- term.redirect(mon)
- term.setBackgroundColor(colors.red)
- term.clear()
- term.setTextColor(colors.white)
- term.setCursorPos(5,5)
- term.write("Ausser")
- term.setCursorPos(5,6)
- term.write("Betrieb")
- sleep(5)
- os.reboot()
- break
- end
- end
- end
- function drawInterface( ... )
- term.setBackgroundColor(colors.white)
- term.clear()
- paintutils.drawLine(1,1,xsize,1,blue)
- term.setBackgroundColor(blue)
- term.setTextColor(colors.white)
- term.setCursorPos(2,1)
- term.write("OBK")
- if nfc then
- term.setCursorPos(xsize-5,1)
- term.write(")))")
- end
- term.setCursorPos(xsize/2-10,ysize/2-4)
- term.setTextColor(colors.black)
- term.setBackgroundColor(colors.white)
- term.write("Bitte Aktion waehlen")
- term.setBackgroundColor(colors.lightGray)
- term.setTextColor(colors.white)
- term.setCursorPos(xsize/2-9,ysize/2)
- term.write("Zahlung")
- term.setCursorPos(xsize/2-1,ysize/2)
- term.write("Gutschrift")
- local typ = ""
- while true do
- local event, button, x, y = os.pullEvent("mouse_click")
- if x >= math.floor(xsize/2-9) and x <= math.floor(xsize/2-3) and y == math.floor(ysize/2) then
- typ = "zahlung"
- break
- elseif x >= math.floor(xsize/2-1) and x <= math.floor(xsize/2+8) and y == math.floor(ysize/2) then
- typ = "gutschrift"
- break
- end
- end
- paintutils.drawFilledBox(1,2,xsize,ysize,colors.white)
- term.setCursorPos(xsize/2-11,ysize/2-4)
- term.setTextColor(colors.black)
- term.setBackgroundColor(colors.white)
- term.write("Zahlungsbetrag waehlen")
- term.setCursorPos(xsize/2-4,ysize/2)
- term.write("EUR ")
- term.setTextColor(blue)
- local betrag = read()
- paintutils.drawFilledBox(1,2,xsize,ysize,colors.white)
- term.setCursorPos(xsize/2-12,ysize/2-4)
- term.setTextColor(colors.black)
- term.setBackgroundColor(colors.white)
- term.write("Verwendungszweck angeben")
- term.setCursorPos(xsize/2-6,ysize/2)
- term.setTextColor(blue)
- local text = read()
- paintutils.drawFilledBox(1,2,xsize,ysize,colors.white)
- term.setCursorPos(xsize/2-9,ysize/2)
- term.write("Zahlungsvorgang...")
- if typ == "zahlung" then
- startTransaktion(tonumber(betrag),text)
- elseif typ == "gutschrift" then
- startGutschrift(tonumber(betrag), text)
- end
- end
- diskdrive = nil
- function waitForCard()
- modem.open(50)
- while true do
- local event, modemSide, channel, rchannel, message, dist = os.pullEvent()
- if event == "modem_message" and channel == 50 and message["Request"] == "Bankomat.NFC.Pay" and dist < 4 then
- return message["Data"]
- elseif event == "disk" then
- diskdrive = modemSide
- if disk.hasData(modemSide) and fs.exists("disk/.bankomat") then
- local h = fs.open("disk/.bankomat", "r")
- local x = h.readAll()
- h.close()
- return x
- else
- disk.eject(modemSide)
- end
- end
- end
- end
- function startTransaktion(betrag, text)
- mon.setBackgroundColor(colors.white)
- mon.clear()
- local prev = term.redirect(mon)
- local x,y = term.getSize()
- paintutils.drawLine(1,1,xsize,1,colors.blue)
- term.setTextColor(colors.white)
- term.setCursorPos(1,1)
- term.write("OBK")
- term.setCursorPos(x-3,1)
- if nfc then
- term.write(")))")
- end
- local str = betrag.." EUR"
- term.setCursorPos(math.ceil(x/2-math.ceil(string.len(str)/2)),3)
- term.setBackgroundColor(colors.white)
- term.setTextColor(colors.blue)
- term.write(betrag)
- term.setTextColor(colors.black)
- term.write(" EUR")
- term.setCursorPos(math.ceil(x/2-5),y-3)
- term.write("Bitte Karte")
- term.setCursorPos(math.ceil(x/2-6),y-2)
- term.write("eingeben oder")
- term.setCursorPos(math.ceil(x/2-5),y-1)
- term.write("NFC starten")
- local card = waitForCard()
- paintutils.drawFilledBox(1,2,x,y,colors.white)
- term.setCursorPos(1,y/2)
- term.write("Autorisierung...")
- modem.open(config["Anschluss"])
- local msg = {}
- msg["Protocol"] = "Bankomat"
- msg["Sender"] = os.getComputerID()..".network.ctOS"
- msg["Receipient"] = "server.bankomat.ctOS"
- msg["Request"] = "User.newTransaktion"
- local tablex = {}
- tablex[1] = card
- tablex[2] = config["Kontonummer"]
- tablex[3] = text
- tablex[4] = betrag
- msg["Data"] = tablex
- msg["nMessageID"] = randomNumber()
- msg["ResponseID"] = msg["nMessageID"] + 1
- if config["Anschluss"] == 1800 then
- networkRegistration()
- msg["Data"] = crypt.encrypt(msg["Data"], "STATIC_TERMINAL")
- msg["LTE"] = {}
- msg["LTE"]["SI"] = "STATIC_TERMINAL"
- end
- modem.transmit(config["Anschluss"], config["Anschluss"], msg)
- while true do
- local event, modemSide, channel, rchannel, mseg = os.pullEvent("modem_message")
- if mseg["Request"] == "User.newTransaktion.Response" and mseg["Sender"] == "server.bankomat.ctOS" and mseg["nMessageID"] == msg["ResponseID"] then
- if config["Anschluss"] == 1800 then
- mseg["Data"] = crypt.decrypt(mseg["Data"], "STATIC_TERMINAL")
- end
- if mseg["Data"] == true then
- paintutils.drawFilledBox(1,2,x,y,colors.white)
- term.setCursorPos(1,y/2)
- term.write("Zahlung erfolgt")
- term.redirect(prev)
- paintutils.drawFilledBox(1,2,xsize,ysize,colors.white)
- term.setCursorPos(xsize/2-7,ysize/2)
- term.write("Zahlung erfolgt")
- if type(diskdrive) ~= "nil" then
- disk.eject(diskdrive)
- end
- local printer = peripheral.find("printer")
- if printer ~= nil then
- if printer.newPage() then
- local xp, yp = printer.getPageSize()
- printer.setCursorPos(1,1)
- printer.write(string.rep("-",xp))
- printer.setCursorPos(xp/2-6,2)
- printer.write("Zahlungsbeleg")
- printer.setCursorPos(1,3)
- printer.write(string.rep("-",xp))
- printer.setCursorPos(2,5)
- printer.write("TerminalID: #"..os.getComputerID())
- printer.setCursorPos(2,7)
- printer.write("Zeitstempel: "..os.day().." "..textutils.formatTime(os.time(),true))
- printer.setCursorPos(2,9)
- printer.write("Empfaenger: "..config["Kontonummer"])
- printer.setCursorPos(2,11)
- printer.write("Sender: "..card)
- printer.setCursorPos(2,13)
- printer.write("Verwendungszweck:")
- printer.setCursorPos(2,14)
- printer.write(text)
- local str = "EUR "..betrag
- printer.setCursorPos(xp/2-(string.len(str)/2),16)
- printer.write(str)
- printer.setPageTitle("Zahlungsbeleg")
- printer.endPage()
- end
- end
- return true
- else
- if type(diskdrive) ~= "nil" then
- disk.eject(diskdrive)
- end
- paintutils.drawFilledBox(1,2,x,y,colors.white)
- term.setCursorPos(1,y/2)
- term.write("Zahlungsfehler")
- term.redirect(prev)
- paintutils.drawFilledBox(1,2,xsize,ysize,colors.white)
- term.setCursorPos(xsize/2-7,ysize/2)
- term.write("Zahlungsfehler")
- return false
- end
- break
- end
- end
- sleep(5)
- term.setBackgroundColor(colors.black)
- term.clear()
- term.setCursorPos(1,1)
- return
- end
- function startGutschrift(betrag, text)
- mon.setBackgroundColor(colors.white)
- mon.clear()
- local prev = term.redirect(mon)
- local x,y = term.getSize()
- paintutils.drawLine(1,1,xsize,1,colors.blue)
- term.setTextColor(colors.white)
- term.setCursorPos(1,1)
- term.write("OBK")
- term.setCursorPos(x-3,1)
- if nfc then
- term.write(")))")
- end
- local str = "+"..betrag.." EUR"
- term.setCursorPos(math.ceil(x/2-math.ceil(string.len(str)/2)),3)
- term.setBackgroundColor(colors.white)
- term.setTextColor(colors.blue)
- term.write("+"..betrag)
- term.setTextColor(colors.black)
- term.write(" EUR")
- term.setCursorPos(math.ceil(x/2-5),y-3)
- term.write("Bitte Karte")
- term.setCursorPos(math.ceil(x/2-6),y-2)
- term.write("eingeben oder")
- term.setCursorPos(math.ceil(x/2-5),y-1)
- term.write("NFC starten")
- local card = waitForCard()
- paintutils.drawFilledBox(1,2,x,y,colors.white)
- term.setCursorPos(1,x/2)
- term.write("Autorisierung...")
- local modem = peripheral.find("modem")
- modem.open(config["Anschluss"])
- local msg = {}
- msg["Protocol"] = "Bankomat"
- msg["Sender"] = os.getComputerID()..".network.ctOS"
- msg["Receipient"] = "server.bankomat.ctOS"
- msg["Request"] = "User.newTransaktion"
- local tablex = {}
- tablex[1] = config["Kontonummer"]
- tablex[2] = card
- tablex[3] = text
- tablex[4] = betrag
- msg["Data"] = tablex
- msg["nMessageID"] = randomNumber()
- msg["ResponseID"] = msg["nMessageID"] + 1
- if config["Anschluss"] == 1800 then
- networkRegistration()
- msg["Data"] = crypt.encrypt(msg["Data"], "STATIC_TERMINAL")
- msg["LTE"] = {}
- msg["LTE"]["SI"] = "STATIC_TERMINAL"
- end
- modem.transmit(config["Anschluss"], config["Anschluss"], msg)
- while true do
- local event, modemSide, channel, rchannel, mseg = os.pullEvent("modem_message")
- if mseg["Request"] == "User.newTransaktion.Response" and mseg["Sender"] == "server.bankomat.ctOS" and mseg["nMessageID"] == msg["ResponseID"] then
- if config["Anschluss"] == 1800 then
- mseg["Data"] = crypt.decrypt(mseg["Data"], "STATIC_TERMINAL")
- end
- if mseg["Data"] == true then
- paintutils.drawFilledBox(1,2,x,y,colors.white)
- term.setCursorPos(3,y/2)
- term.write("Gutschrift")
- term.setCursorPos(4,y/2+1)
- term.write("erfolgt")
- term.redirect(prev)
- paintutils.drawFilledBox(1,2,xsize,ysize,colors.white)
- term.setCursorPos(xsize/2-9,ysize/2)
- term.write("Gutschrift erfolgt")
- if type(diskdrive) ~= "nil" then
- disk.eject(diskdrive)
- end
- local printer = peripheral.find("printer")
- if printer ~= nil then
- if printer.newPage() then
- local xp, yp = printer.getPageSize()
- printer.setCursorPos(1,1)
- printer.write(string.rep("-",xp))
- printer.setCursorPos(xp/2-6,2)
- printer.write("Zahlungsbeleg")
- printer.setCursorPos(1,3)
- printer.write(string.rep("-",xp))
- printer.setCursorPos(2,5)
- printer.write("TerminalID: #"..os.getComputerID())
- printer.setCursorPos(2,7)
- printer.write("Zeitstempel: "..os.day().." "..textutils.formatTime(os.time(),true))
- printer.setCursorPos(2,9)
- printer.write("Empfaenger: "..card)
- printer.setCursorPos(2,11)
- printer.write("Sender: "..config["Kontonummer"])
- printer.setCursorPos(2,13)
- printer.write("Verwendungszweck:")
- printer.setCursorPos(2,14)
- printer.write(text)
- local str = "EUR "..betrag
- printer.setCursorPos(xp/2-(string.len(str)/2),16)
- printer.write(str)
- printer.setPageTitle("Zahlungsbeleg")
- printer.endPage()
- end
- end
- return true
- else
- if type(diskdrive) ~= "nil" then
- disk.eject(diskdrive)
- end
- paintutils.drawFilledBox(1,2,x,y,colors.white)
- term.setCursorPos(2,y/2)
- term.write("Zahlungsfehler")
- term.redirect(prev)
- paintutils.drawFilledBox(1,2,xsize,ysize,colors.white)
- term.setCursorPos(xsize/2-7,ysize/2)
- term.write("Zahlungsfehler")
- return false
- end
- break
- end
- end
- sleep(5)
- term.setBackgroundColor(colors.black)
- term.clear()
- term.setCursorPos(1,1)
- return
- end
- if type(tArgs) == "table" and type(tArgs[1]) ~= "nil" then
- term.setBackgroundColor(colors.white)
- term.clear()
- paintutils.drawLine(1,1,xsize,1,blue)
- term.setBackgroundColor(blue)
- term.setTextColor(colors.white)
- term.setCursorPos(2,1)
- term.write("OBK")
- if nfc then
- term.setCursorPos(xsize-5,1)
- term.write(")))")
- end
- paintutils.drawFilledBox(1,2,xsize,ysize,colors.white)
- term.setCursorPos(xsize/2-9,ysize/2)
- term.setTextColor(blue)
- term.write("Zahlungsvorgang...")
- if tonumber(tArgs[1]) > 0 then
- return startTransaktion(tonumber(tArgs[1]), tArgs[2])
- else
- return startGutschrift(math.abs(tonumber(tArgs[1])), tArgs[2])
- end
- else
- if shell then
- drawInterface()
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement