396 lines
13 KiB
Lua
396 lines
13 KiB
Lua
|
||
local bg = term.getBackgroundColor()
|
||
local fg = term.getTextColor()
|
||
|
||
if fs.exists("bigfont") then
|
||
os.loadAPI("bigfont")
|
||
end
|
||
|
||
local register = false
|
||
|
||
local rememberme = false
|
||
|
||
local w,h = term.getSize()
|
||
|
||
local userbox = lUtils.makeEditBox("username",w,1)
|
||
local pwbox = lUtils.makeEditBox("password",w,1)
|
||
local pwconfirm = lUtils.makeEditBox("pwconfirm",w,1)
|
||
|
||
|
||
if fs.exists("LevelOS/data/account.txt") then
|
||
userbox.lines[1] = lUtils.fread("LevelOS/data/account.txt")
|
||
end
|
||
|
||
if fs.exists("LevelOS/data/account2.txt") then
|
||
--pwbox.lines[1] = lUtils.fread("LevelOS/data/account2.txt")
|
||
token = lUtils.fread("LevelOS/data/account2.txt")
|
||
--rememberme = true
|
||
local res = http.post("https://www.old.leveloper.cc/auth.php","username="..userbox.lines[1].."&token="..token)
|
||
local str = res.readAll()
|
||
if str:find("Welcome") then
|
||
local userID = res.getResponseHeaders()["Set-Cookie"]
|
||
return userID,userbox.lines[1]
|
||
end
|
||
end
|
||
|
||
local trysub = false
|
||
|
||
local continue = true
|
||
|
||
local boxes = {}
|
||
|
||
local e = {}
|
||
|
||
local webresponse
|
||
|
||
local userID = ""
|
||
|
||
local pause = false
|
||
|
||
local function submit()
|
||
trysub = true
|
||
continue = true
|
||
os.sleep(0.5)
|
||
if continue == true then
|
||
saveuser = fs.open("LevelOS/data/account.txt","w")
|
||
saveuser.write(userbox.lines[1])
|
||
saveuser.close()
|
||
if rememberme then
|
||
--lUtils.fwrite("LevelOS/data/account2.txt",pwbox.lines[1])
|
||
else
|
||
fs.delete("LevelOS/data/account2.txt")
|
||
end
|
||
if register then
|
||
response = {http.post("https://www.old.leveloper.cc/register.php","username="..userbox.lines[1].."&password="..pwbox.lines[1])}
|
||
local webres = response[1].readAll()
|
||
if webres == "200" then
|
||
local xtra = ""
|
||
if rememberme then
|
||
xtra = "&rememberme=true"
|
||
end
|
||
response2 = {http.post("https://www.old.leveloper.cc/auth.php","username="..userbox.lines[1].."&password="..pwbox.lines[1]..xtra)}
|
||
userID = response2[1].getResponseHeaders()["Set-Cookie"]
|
||
webresponse = webres
|
||
if rememberme then
|
||
token = lUtils.getField(response2[1].readAll(),"token")
|
||
lUtils.fwrite("LevelOS/data/account2.txt",token)
|
||
end
|
||
end
|
||
else
|
||
local xtra = ""
|
||
if rememberme then
|
||
xtra = "&rememberme=true"
|
||
end
|
||
response = {http.post("https://www.old.leveloper.cc/auth.php","username="..userbox.lines[1].."&password="..pwbox.lines[1]..xtra)}
|
||
webresponse = response[1].readAll()
|
||
userID = response[1].getResponseHeaders()["Set-Cookie"]
|
||
if rememberme then
|
||
token = lUtils.getField(webresponse,"token")
|
||
lUtils.fwrite("LevelOS/data/account2.txt",token)
|
||
end
|
||
end
|
||
--print("username="..userbox.lines[1].."&password="..pwbox.lines[1])
|
||
-- check if things are present communicate with PHP
|
||
end
|
||
end
|
||
|
||
local regsel = false
|
||
|
||
local function draw()
|
||
boxes = {}
|
||
local cY = 1
|
||
local w,h = term.getSize()
|
||
term.setBackgroundColor(colors.white)
|
||
term.clear()
|
||
term.setBackgroundColor(colors.white)
|
||
if h < 19 then
|
||
-- absolutely fkin nothin
|
||
elseif h < 25 or w < 26 or not bigfont then
|
||
for t=0,2 do
|
||
term.setCursorPos(1,cY+t)
|
||
term.clearLine()
|
||
end
|
||
term.setCursorPos(2,cY+2)
|
||
term.setTextColor(colors.white)
|
||
term.setBackgroundColor(colors.lightGray)
|
||
term.write(string.rep("\143",w-2))
|
||
term.setTextColor(colors.blue)
|
||
term.setBackgroundColor(colors.white)
|
||
cY = cY+1
|
||
term.setCursorPos(1,cY)
|
||
if register then
|
||
lUtils.centerText("Register")
|
||
else
|
||
lUtils.centerText("Log in")
|
||
end
|
||
cY = cY+2
|
||
else
|
||
if h < 50 or w < 90 then
|
||
for t=0,4 do
|
||
term.setCursorPos(1,cY+t)
|
||
term.clearLine()
|
||
end
|
||
term.setCursorPos(2,cY+4)
|
||
else
|
||
for t=0,10 do
|
||
term.setCursorPos(1,cY+t)
|
||
term.clearLine()
|
||
end
|
||
term.setCursorPos(2,cY+10)
|
||
end
|
||
term.setTextColor(colors.white)
|
||
term.setBackgroundColor(colors.lightGray)
|
||
term.write(string.rep("\143",w-2))
|
||
term.setTextColor(colors.blue)
|
||
term.setBackgroundColor(colors.white)
|
||
cY = cY+1
|
||
local size = 1
|
||
--cY = cY+4
|
||
if h >= 50 and w >= 90 then
|
||
size = 2
|
||
cY = cY+10
|
||
else
|
||
cY = cY+4
|
||
end
|
||
if register then
|
||
bigfont.writeOn(term.current(),size,"Register",nil,2)
|
||
else
|
||
bigfont.writeOn(term.current(),size,"Log in",nil,2)
|
||
end
|
||
end
|
||
term.setBackgroundColor(colors.white)
|
||
for y=cY,h do
|
||
term.setCursorPos(1,y)
|
||
term.clearLine()
|
||
end
|
||
cY = cY+1
|
||
term.setTextColor(colors.lightGray)
|
||
local offset = math.ceil(w/30)
|
||
local spacing = 0
|
||
if h > 50 then
|
||
spacing = 5
|
||
elseif h > 45 then
|
||
spacing = 4
|
||
elseif h > 40 then
|
||
spacing = 3
|
||
elseif h > 35 then
|
||
spacing = 2
|
||
elseif h > 30 then
|
||
spacing = 1
|
||
end
|
||
cY = cY+spacing
|
||
if (register and trysub and userbox.lines[1] and userbox.lines[1] ~= "" and string.len(userbox.lines[1]) >= 3 and #userbox.lines[1] <= 15 and not string.find(userbox.lines[1],"[^a-zA-Z0-9]")) then -- also check for special characters
|
||
term.setTextColor(colors.lime)
|
||
elseif register and trysub then
|
||
term.setTextColor(colors.red)
|
||
term.setCursorPos(1,cY+3)
|
||
if #userbox.lines[1] < 3 or #userbox.lines[1] > 15 then
|
||
lUtils.centerText("Username must be between 3-15 characters.")
|
||
else
|
||
lUtils.centerText("Username can not contain special characters.")
|
||
end
|
||
continue = false
|
||
else
|
||
term.setTextColor(colors.lightGray)
|
||
end
|
||
lUtils.border(1+offset,cY,w-offset,cY+2)
|
||
userbox.x = 2+offset
|
||
userbox.y = cY+1
|
||
userbox.width = ((w-offset)-1)-(1+offset)
|
||
boxes[#boxes+1] = {x1=1+offset,y1=cY,x2=w-offset,y2=cY+2,func=function() lUtils.drawEditBox(userbox,nil,nil,nil,nil,nil,nil,true,false) end}
|
||
cY = cY+1
|
||
term.setCursorPos(2+offset,cY)
|
||
if userbox.lines[1] and userbox.lines[1] ~= "" then
|
||
term.setTextColor(colors.gray)
|
||
term.write(string.sub(userbox.lines[1],1,userbox.width))
|
||
else
|
||
term.write("Username")
|
||
end
|
||
cY = cY+3+spacing
|
||
if (register and trysub and pwbox.lines[1] and pwbox.lines[1] ~= "" and string.len(pwbox.lines[1]) >= 5) then
|
||
term.setTextColor(colors.lime)
|
||
elseif register and trysub then
|
||
term.setTextColor(colors.red)
|
||
continue = false
|
||
else
|
||
term.setTextColor(colors.lightGray)
|
||
end
|
||
lUtils.border(1+offset,cY,w-offset,cY+2)
|
||
pwbox.x = 2+offset
|
||
pwbox.y = cY+1
|
||
pwbox.width = ((w-offset)-1)-(1+offset)
|
||
boxes[#boxes+1] = {x1=1+offset,y1=cY,x2=w-offset,y2=cY+2,func=function() lUtils.drawEditBox(pwbox,nil,nil,nil,nil,nil,nil,true,false,"*") end}
|
||
cY = cY+1
|
||
term.setCursorPos(2+offset,cY)
|
||
if pwbox.lines[1] and pwbox.lines[1] ~= "" then
|
||
term.setTextColor(colors.gray)
|
||
term.write(string.rep("*",string.len(string.sub(pwbox.lines[1],1,pwbox.width))))
|
||
else
|
||
term.write("Password")
|
||
end
|
||
if register then
|
||
cY = cY+3+spacing
|
||
if (register and trysub and pwconfirm.lines[1] and pwconfirm.lines[1] ~= "" and string.len(pwconfirm.lines[1]) > 3 and pwconfirm.lines[1] == pwbox.lines[1]) then
|
||
term.setTextColor(colors.lime)
|
||
elseif register and trysub then
|
||
term.setTextColor(colors.red)
|
||
if spacing > 0 then
|
||
term.setCursorPos(1,cY+3)
|
||
lUtils.centerText("Passwords don't match.")
|
||
end
|
||
continue = false
|
||
else
|
||
term.setTextColor(colors.lightGray)
|
||
end
|
||
lUtils.border(1+offset,cY,w-offset,cY+2)
|
||
pwconfirm.x = 2+offset
|
||
pwconfirm.y = cY+1
|
||
pwconfirm.width = ((w-offset)-1)-(1+offset)
|
||
boxes[#boxes+1] = {x1=1+offset,y1=cY,x2=w-offset,y2=cY+2,func=function() lUtils.drawEditBox(pwconfirm,nil,nil,nil,nil,nil,nil,true,false,"*") end}
|
||
cY = cY+1
|
||
term.setCursorPos(2+offset,cY)
|
||
if pwconfirm.lines[1] and pwconfirm.lines[1] ~= "" then
|
||
term.setTextColor(colors.gray)
|
||
term.write(string.rep("*",string.len(string.sub(pwconfirm.lines[1],1,pwconfirm.width))))
|
||
else
|
||
term.write("Confirm Password")
|
||
end
|
||
end
|
||
cY = cY+3+spacing
|
||
term.setTextColor(colors.white)
|
||
if e[1] == "mouse_click" and e[3] >= 1+(offset+2) and e[4] >= cY and e[3] <= w-(offset+2) and e[4] <= cY+2 then
|
||
regsel = true
|
||
elseif e[1] == "mouse_up" then
|
||
regsel = false
|
||
end
|
||
if regsel or trysub then
|
||
term.setBackgroundColor(colors.lightBlue)
|
||
else
|
||
term.setBackgroundColor(colors.blue)
|
||
end
|
||
lUtils.border(1+(offset+2),cY,w-(offset+2),cY+2,"fill")
|
||
boxes[#boxes+1] = {x1=1+(offset+2),y1=cY,x2=w-(offset+2),y2=cY+2,func=submit}
|
||
cY = cY+1
|
||
term.setCursorPos(1,cY)
|
||
if register then
|
||
lUtils.centerText("Register")
|
||
term.setBackgroundColor(colors.white)
|
||
term.setTextColor(colors.lightBlue)
|
||
term.setCursorPos(1,cY-2)
|
||
local w,h = term.getSize()
|
||
if w < string.len("Already have an account? Log in.") then
|
||
lUtils.centerText("Log in")
|
||
else
|
||
lUtils.centerText("Already have an account? Log in.")
|
||
end
|
||
boxes[#boxes+1] = {x1=math.ceil(w/2)-16,x2=math.ceil(w/2)+16,y1=cY-2,y2=cY-2,func=function() register = false end}
|
||
else
|
||
lUtils.centerText("Log in")
|
||
term.setBackgroundColor(colors.white)
|
||
term.setTextColor(colors.lightBlue)
|
||
term.setCursorPos(1,cY+2)
|
||
local w,h = term.getSize()
|
||
if w < string.len("Don't have an account yet? Register.") then
|
||
lUtils.centerText("Register")
|
||
else
|
||
lUtils.centerText("Don't have an account yet? Register.")
|
||
end
|
||
boxes[#boxes+1] = {x1=math.ceil(w/2)-18,x2=math.ceil(w/2)+18,y1=cY+2,y2=cY+2,func=function() register = true end}
|
||
end
|
||
cY = cY+4
|
||
local bl = {
|
||
{
|
||
"",
|
||
"00f",
|
||
"ff0",
|
||
},
|
||
{
|
||
" ",
|
||
"0ff",
|
||
"f00",
|
||
},
|
||
{
|
||
"",
|
||
"fff",
|
||
"000",
|
||
},
|
||
}
|
||
if rememberme then
|
||
bl[2][1] = "x"
|
||
end
|
||
local txt = " Auto-login" -- 4 spaces for the box
|
||
local rX = math.ceil(w/2)-math.floor(#txt/2)
|
||
term.setCursorPos(rX,cY)
|
||
term.setBackgroundColor(colors.white)
|
||
term.setTextColor(colors.gray)
|
||
term.write(txt)
|
||
for b=1,#bl do
|
||
term.setCursorPos(rX,(cY-2)+b)
|
||
term.blit(unpack(bl[b]))
|
||
end
|
||
table.insert(boxes,{x1=rX,y1=cY,x2=rX+2,y2=cY,func=function() local f = function() rememberme = not rememberme end pause = true f() pause = false end})
|
||
end
|
||
local function textboxes()
|
||
while true do
|
||
local e = {os.pullEvent()}
|
||
term.setCursorPos(1,1)
|
||
term.setBackgroundColor(colors.white)
|
||
term.setTextColor(colors.black)
|
||
--term.write(table.concat(e,", "))
|
||
if e[1] == "mouse_up" and e[2] == 1 then
|
||
for b=1,#boxes do
|
||
local box = boxes[b]
|
||
if e[3] >= box.x1 and e[4] >= box.y1 and e[3] <= box.x2 and e[4] <= box.y2 then
|
||
trysub = false
|
||
box.func()
|
||
os.startTimer(0.1)
|
||
end
|
||
end
|
||
end
|
||
end
|
||
end
|
||
local txtbox = coroutine.create(textboxes)
|
||
if rememberme then submit() end
|
||
draw()
|
||
while true do
|
||
e = {os.pullEvent()}
|
||
local w,h = term.getSize()
|
||
local pW,pH
|
||
if w < 29 then
|
||
pW = 19
|
||
pH = 15
|
||
else
|
||
pW = 29
|
||
pH = 9
|
||
end
|
||
if not webresponse then
|
||
if not pause then
|
||
draw()
|
||
end
|
||
coroutine.resume(txtbox,table.unpack(e))
|
||
while pause do
|
||
local e = {os.pullEvent()}
|
||
coroutine.resume(txtbox,table.unpack(e))
|
||
end
|
||
else
|
||
if (register and webresponse ~= "200") or (not register and not string.find(webresponse,"Welcome")) then
|
||
lUtils.popup("LevelOS",lUtils.getField(webresponse,"msg"),pW,pH,{"OK"})
|
||
term.setTextColor(fg)
|
||
term.setBackgroundColor(bg)
|
||
if rememberme then
|
||
rememberme = false
|
||
fs.delete("LevelOS/data/account2.txt")
|
||
end
|
||
return false
|
||
elseif register then
|
||
lUtils.popup("LevelOS","You have successfully registered! You are now logged in.",pW,pH,{"OK"})
|
||
term.setTextColor(fg)
|
||
term.setBackgroundColor(bg)
|
||
return userID,userbox.lines[1]
|
||
else
|
||
term.setTextColor(fg)
|
||
term.setBackgroundColor(bg)
|
||
return userID,userbox.lines[1]
|
||
end
|
||
end
|
||
end |