iteration
This commit is contained in:
		
							
								
								
									
										135
									
								
								auth_server.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										135
									
								
								auth_server.lua
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,135 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					data = {
 | 
				
			||||||
 | 
					    users = {
 | 
				
			||||||
 | 
					        ["admin"] = {
 | 
				
			||||||
 | 
					            password = "admin"
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function save_data()
 | 
				
			||||||
 | 
					    db = fs.open("auth.db", "w")
 | 
				
			||||||
 | 
					    db.write(textutils.serialize(data))
 | 
				
			||||||
 | 
					    db.close()
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function load_data()
 | 
				
			||||||
 | 
					    if fs.exists("auth.db") then
 | 
				
			||||||
 | 
					        db = fs.open("auth.db", "r")
 | 
				
			||||||
 | 
					        db_contents = db.readAll()
 | 
				
			||||||
 | 
					        db.close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        data = textutils.unserialize(db_contents)
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function generate_token(user)
 | 
				
			||||||
 | 
					    local token = textutils.sha256(user .. os.time() .. math.random())
 | 
				
			||||||
 | 
					    data.users[user].token = token
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return token
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function convert_password(password)
 | 
				
			||||||
 | 
					    return textutils.sha256(password + "3m&LmNm7")
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					load_data()
 | 
				
			||||||
 | 
					math.randomseed(os.time())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					while true do
 | 
				
			||||||
 | 
					    client_id, msg = rednet.receive()
 | 
				
			||||||
 | 
					    request = msg
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if request.action == nil then
 | 
				
			||||||
 | 
					        rednet.send(client_id, "invalid request")
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if request.action == "register" then
 | 
				
			||||||
 | 
					        if request.username == nil or request.password == nil then
 | 
				
			||||||
 | 
					            rednet.send(client_id, "invalid request")
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if data.users[request.username] ~= nil then
 | 
				
			||||||
 | 
					            rednet.send(client_id, "user already exists")
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        data.users[request.username] = {
 | 
				
			||||||
 | 
					            password = convert_password(request.password)
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        save_data()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        rednet.send(client_id, "ok")
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if request.action == "login" then
 | 
				
			||||||
 | 
					        if request.username == nil or request.password == nil then
 | 
				
			||||||
 | 
					            rednet.send(client_id, "invalid request")
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if data.users[request.username] == nil then
 | 
				
			||||||
 | 
					            rednet.send(client_id, "user not found")
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if convert_password(data.users[request.username].password) == request.password then
 | 
				
			||||||
 | 
					            local token = generate_token(request.username)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            rednet.send(client_id, token)
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					            rednet.send(client_id, "invalid password")
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if request.action == "token" then
 | 
				
			||||||
 | 
					        if request.token == nil then
 | 
				
			||||||
 | 
					            rednet.send(client_id, "invalid request")
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        for user, userdata in pairs(data.users) do
 | 
				
			||||||
 | 
					            if userdata.token == request.token then
 | 
				
			||||||
 | 
					                rednet.send(client_id, user)
 | 
				
			||||||
 | 
					            end
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        rednet.send(client_id, "invalid token")
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if request.action == "profile" then
 | 
				
			||||||
 | 
					        if request.username == nil then
 | 
				
			||||||
 | 
					            rednet.send(client_id, "invalid request")
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        local profile = {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if data.users[request.username].profile_data ~= nil then
 | 
				
			||||||
 | 
					            profile = data.users[request.username].profile_data
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					            profile.display_name = request.username
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        profile.username = request.username
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        rednet.send(client_id, data.users[request.username])
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if request.action == "update_profile" then
 | 
				
			||||||
 | 
					        if request.username == nil or request.token == nil then
 | 
				
			||||||
 | 
					            rednet.send(client_id, "invalid request")
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if data.users[request.username].token == request.token then
 | 
				
			||||||
 | 
					            if request.profile_data ~= nil then
 | 
				
			||||||
 | 
					                data.users[request.username].profile_data = request.profile_data
 | 
				
			||||||
 | 
					            end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            save_data()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            rednet.send(client_id, "ok")
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					            rednet.send(client_id, "invalid token")
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
@ -19,12 +19,6 @@ if response.getResponseCode() == 200 then
 | 
				
			|||||||
    file.write(response.readAll())
 | 
					    file.write(response.readAll())
 | 
				
			||||||
    file.close()
 | 
					    file.close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    -- check if program is in path
 | 
					 | 
				
			||||||
    if not shell.resolveProgram(program_name) then
 | 
					 | 
				
			||||||
        io.write("Program not in path, adding to path\n")
 | 
					 | 
				
			||||||
        shell.setPath(shell.path() .. ":" .. bin_path)
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    io.write("Updated " .. program_name .. ".lua\n")
 | 
					    io.write("Updated " .. program_name .. ".lua\n")
 | 
				
			||||||
else
 | 
					else
 | 
				
			||||||
    io.write("Failed to update " .. program_name .. ".lua\n")
 | 
					    io.write("Failed to update " .. program_name .. ".lua\n")
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										3
									
								
								utils/lsh.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								utils/lsh.lua
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,3 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					local bin_path = "/bin/"
 | 
				
			||||||
 | 
					shell.setPath(shell.path() .. ":" .. bin_path)
 | 
				
			||||||
		Reference in New Issue
	
	Block a user