Jump to content
  • Sky
  • Blueberry
  • Slate
  • Blackcurrant
  • Watermelon
  • Strawberry
  • Orange
  • Banana
  • Apple
  • Emerald
  • Chocolate
  • Charcoal
  • 0
Sherlok

Having issues with some code on opencomputers with opensecurity

Question

So i have here some programs for a security server door controller and card writer theres a issue where as when you use the card right access level the server says ok but the controller says access denied heres the 3 parts of the code 

Quote
  1. local accessLevel = 
  2. local cryptKey = {1, 2, 3, 4, 5}
  3. local modemPort = 199
  4. // Door controller
  5.  
  6.  
  7. local component = require("component")
  8. local gpu = component.gpu
  9. local event = require("event")
  10. local ser = require("serialization")
  11. local term = require("term")
  12. local computer = component.computer
  13.  
  14. local door = component.os_door
  15. local magReader = component.os_magreader
  16.  
  17. local modem = component.modem
  18.  
  19.  
  20. local function convert( chars, dist, inv )
  21.   return string.char( ( string.byte( chars ) - 32 + ( inv and -dist or dist ) ) % 95 + 32 )
  22. end
  23.  
  24. local function crypt(str,k,inv)
  25.   local enc= "";
  26.   for i=1,#str do
  27.     if(#str-k[5] >= i or not inv)then
  28.       for inc=0,3 do
  29.     if(i%4 == inc)then
  30.       enc = enc .. convert(string.sub(str,i,i),k[inc+1],inv);
  31.       break;
  32.     end
  33.       end
  34.     end
  35.   end
  36.   if(not inv)then
  37.     for i=1,k[5] do
  38.       enc = enc .. string.char(math.random(32,126));
  39.     end
  40.   end
  41.   return enc;
  42. end
  43.  
  44.  
  45. function splitString(str, sep)
  46.         local sep, fields = sep or ":", {}
  47.         local pattern = string.format("([^%s]+)", sep)
  48.         str:gsub(pattern, function(c) fields[#fields+1] = c end)
  49.         return fields
  50. end
  51.  
  52. term.clear()
  53. print("Security door   Access level : " .. tostring(accessLevel))
  54. print("---------------------------------------------------------------------------")
  55.  
  56. if modem.isOpen(modemPort) == false then
  57.   modem.open(modemPort)
  58. end
  59. data = crypt(tostring(accessLevel), cryptKey)
  60. modem.broadcast(modemPort, "setlevel", data)
  61.  
  62. while true do
  63.   ev, _, user, str, uuid = event.pull("magData")
  64.   local data = crypt(str, cryptKey, true)
  65.   if ev then
  66.     local tmpTable = splitString(data," ")
  67.     term.write(tmpTable[3] .. ":")
  68.     if modem.isOpen(modemPort) == false then
  69.       modem.open(modemPort)
  70.     end
  71.     data = crypt(tmpTable[3], cryptKey)
  72.     modem.broadcast(modemPort, "checkuser", data)
  73.     local e, _, from, port, _, msg = event.pull(1, "modem_message")
  74.     if e then
  75.       data = crypt(msg, cryptKey, true)
  76. --    print(data)
  77.       if data == "true" then
  78.     term.write("Access granted\n")
  79.     computer.beep()
  80.     door.toggle()
  81.     os.sleep(2)
  82.     door.toggle()
  83.       else
  84.     term.write("Access denied\n")
  85.       end
  86.     else
  87.       term.write("server timeout\n")
  88.     end
  89.   end
  90. end
Quote
  1. local cryptKey = {1, 2, 3, 4, 5} //Server code
  2. local modemPort = 199
  3.  
  4.  
  5.  
  6. local component = require("component")
  7. local event = require("event")
  8. local modem = component.modem
  9. local ser = require ("serialization")
  10. local term = require("term")
  11.  
  12. local function convert( chars, dist, inv )
  13.   return string.char( ( string.byte( chars ) - 32 + ( inv and -dist or dist ) ) % 95 + 32 )
  14. end
  15.  
  16.  
  17. local function crypt(str,k,inv)
  18.   local enc= "";
  19.   for i=1,#str do
  20.     if(#str-k[5] >= i or not inv)then
  21.       for inc=0,3 do
  22.     if(i%4 == inc)then
  23.       enc = enc .. convert(string.sub(str,i,i),k[inc+1],inv);
  24.       break;
  25.     end
  26.       end
  27.     end
  28.   end
  29.   if(not inv)then
  30.     for i=1,k[5] do
  31.       enc = enc .. string.char(math.random(32,126));
  32.     end
  33.   end
  34.   return enc;
  35. end
  36.  
  37. --// exportstring( string )
  38. --// returns a "Lua" portable version of the string
  39. local function exportstring( s )
  40.     s = string.format( "%q",s )
  41.     -- to replace
  42.     s = string.gsub( s,"\\\n","\\n" )
  43.     s = string.gsub( s,"\r","\\r" )
  44.     s = string.gsub( s,string.char(26),"\"..string.char(26)..\"" )
  45.     return s
  46. end
  47. --// The Save Function
  48. function saveTable(  tbl,filename )
  49.     local charS,charE = "   ","\n"
  50.     local file,err
  51.     -- create a pseudo file that writes to a string and return the string
  52.     if not filename then
  53.         file =  { write = function( self,newstr ) self.str = self.str..newstr end, str = "" }
  54.         charS,charE = "",""
  55.     -- write table to tmpfile
  56.     elseif filename == true or filename == 1 then
  57.         charS,charE,file = "","",io.tmpfile()
  58.     -- write table to file
  59.     -- use io.open here rather than io.output, since in windows when clicking on a file opened with io.output will create an error
  60.     else
  61.         file,err = io.open( filename, "w" )
  62.         if err then return _,err end
  63.     end
  64.     -- initiate variables for save procedure
  65.     local tables,lookup = { tbl },{ [tbl] = 1 }
  66.     file:write( "return {"..charE )
  67.     for idx,t in ipairs( tables ) do
  68.         if filename and filename ~= true and filename ~= 1 then
  69.             file:write( "-- Table: {"..idx.."}"..charE )
  70.         end
  71.         file:write( "{"..charE )
  72.         local thandled = {}
  73.         for i,v in ipairs( t ) do
  74.             thandled[i] = true
  75.             -- escape functions and userdata
  76.             if type( v ) ~= "userdata" then
  77.                 -- only handle value
  78.                 if type( v ) == "table" then
  79.                     if not lookup[v] then
  80.                         table.insert( tables, v )
  81.                         lookup[v] = #tables
  82.                     end
  83.                     file:write( charS.."{"..lookup[v].."},"..charE )
  84.                 elseif type( v ) == "function" then
  85.                     file:write( charS.."loadstring("..exportstring(string.dump( v )).."),"..charE )
  86.                 else
  87.                     local value =  ( type( v ) == "string" and exportstring( v ) ) or tostring( v )
  88.                     file:write(  charS..value..","..charE )
  89.                 end
  90.             end
  91.         end
  92.         for i,v in pairs( t ) do
  93.             -- escape functions and userdata
  94.             if (not thandled[i]) and type( v ) ~= "userdata" then
  95.                 -- handle index
  96.                 if type( i ) == "table" then
  97.                     if not lookup[i] then
  98.                         table.insert( tables,i )
  99.                         lookup[i] = #tables
  100.                     end
  101.                     file:write( charS.."[{"..lookup[i].."}]=" )
  102.                 else
  103.                     local index = ( type( i ) == "string" and "["..exportstring( i ).."]" ) or string.format( "[%d]",i )
  104.                     file:write( charS..index.."=" )
  105.                 end
  106.                 -- handle value
  107.                 if type( v ) == "table" then
  108.                     if not lookup[v] then
  109.                         table.insert( tables,v )
  110.                         lookup[v] = #tables
  111.                     end
  112.                     file:write( "{"..lookup[v].."},"..charE )
  113.                 elseif type( v ) == "function" then
  114.                     file:write( "loadstring("..exportstring(string.dump( v )).."),"..charE )
  115.                 else
  116.                     local value =  ( type( v ) == "string" and exportstring( v ) ) or tostring( v )
  117.                     file:write( value..","..charE )
  118.                 end
  119.             end
  120.         end
  121.         file:write( "},"..charE )
  122.     end
  123.     file:write( "}" )
  124.     -- Return Values
  125.     -- return stringtable from string
  126.     if not filename then
  127.         -- set marker for stringtable
  128.         return file.str.."--|"
  129.     -- return stringttable from file
  130.     elseif filename == true or filename == 1 then
  131.         file:seek ( "set" )
  132.         -- no need to close file, it gets closed and removed automatically
  133.         -- set marker for stringtable
  134.         return file:read( "*a" ).."--|"
  135.     -- close file and return 1
  136.     else
  137.         file:close()
  138.         return 1
  139.     end
  140. end
  141.  
  142. --// The Load Function
  143. function loadTable( sfile )
  144.     local tables, err, _
  145.     -- catch marker for stringtable
  146.     if string.sub( sfile,-3,-1 ) == "--|" then
  147.         tables,err = loadstring( sfile )
  148.     else
  149.         tables,err = loadfile( sfile )
  150.     end
  151.     if err then return _,err
  152.     end
  153.     tables = tables()
  154.     for idx = 1,#tables do
  155.         local tolinkv,tolinki = {},{}
  156.         for i,v in pairs( tables[idx] ) do
  157.             if type( v ) == "table" and tables[v[1]] then
  158.                 table.insert( tolinkv,{ i,tables[v[1]] } )
  159.             end
  160.             if type( i ) == "table" and tables[i[1]] then
  161.                 table.insert( tolinki,{ i,tables[i[1]] } )
  162.             end
  163.         end
  164.         -- link values, first due to possible changes of indices
  165.         for _,v in ipairs( tolinkv ) do
  166.             tables[idx][v[1]] = v[2]
  167.         end
  168.         -- link indices
  169.         for _,v in ipairs( tolinki ) do
  170.             tables[idx][v[2]],tables[idx][v[1]] =  tables[idx][v[1]],nil
  171.         end
  172.     end
  173.     return tables[1]
  174. end
  175.  
  176.  
  177. term.clear()
  178. print("Security server")
  179. print("---------------------------------------------------------------------------")
  180.  
  181. local userTable = loadTable("userlist.txt")
  182. local doorTable = loadTable("doorlist.txt")
  183. if userTable == nil then
  184.   userTable = {}
  185. end
  186. if doorTable == nil then
  187.   doorTable = {}
  188. end
  189.  
  190. function checkUser(user)
  191.   for key, value in pairs(userTable) do
  192.     if value.name == user then
  193.       return true, not value.blocked, tonumber(value.level)
  194.     end
  195.   end
  196.   return false
  197. end
  198.  
  199. function checkLevel(id)
  200.   for key, value in pairs(doorTable) do
  201.     if key == id then
  202.       return tonumber(value)
  203.     end
  204.   end
  205.   return 0
  206. end
  207.  
  208. while true do
  209.   if modem.isOpen(modemPort) == false then
  210.     modem.open(modemPort)
  211.   end
  212.  
  213.   local _, _, from, port, _, command, msg = event.pull("modem_message")
  214.   local data = crypt(msg, cryptKey, true)
  215.   term.write(from .. ":" .. port .. ":" .. command)
  216.   if command == "updateuser" then
  217.     userTable = ser.unserialize(data)
  218.     term.write("\n")
  219.     saveTable(userTable, "userlist.txt")
  220.   elseif command == "setlevel" then
  221.     term.write(" " .. data .. "\n")
  222.     doorTable[from] = data
  223.     saveTable(doorTable, "doorlist.txt")
  224.   elseif command == "checkuser" then
  225.     term.write(":" .. data .. ":")
  226.     local cu, isBlocked, level = checkUser(data)
  227.     if cu == true then          -- user found
  228.       if isBlocked == false then
  229.     data = crypt("false", cryptKey)
  230.     term.write("blocked\n")
  231.     modem.send(from, port, data)
  232.       else
  233.     local cl = checkLevel(from)
  234.     if cl > level then
  235.       data = crypt("false", cryptKey)
  236.       term.write("level too low\n")
  237.       modem.send(from, port, data)
  238.     else
  239.       data = crypt("true", cryptKey)
  240.       term.write("ok\n")
  241.       modem.send(from, port, data)
  242.     end
  243.       end
  244.     else
  245.       data = crypt("false", cryptKey)
  246.       term.write("not found\n")
  247.       modem.send(from, port, data)
  248.     end
  249.   end
  250. end

 

Quote

 

local cryptKey = {1, 2, 3, 4, 5} //Card writer
local modemPort = 199
 
 
local component = require("component")
local gpu = component.gpu
local gui = require("gui")
local event = require("event")
local ser = require("serialization")
writer = component.os_cardwriter
 
local myGui, cardStatusLabel, userList, userNameText, userLevelLabel, LevelUpButton, LevelDownButton
local cardBlockedYesButton, cardBlockedNoButton, userNewButton, userDeleteButton
 
local prgName = "Access System"
local version = "v0.1a"
 
local modem = component.modem
 
local function convert( chars, dist, inv )
  return string.char( ( string.byte( chars ) - 32 + ( inv and -dist or dist ) ) % 95 + 32 )
end
 
 
local function crypt(str,k,inv)
  local enc= "";
  for i=1,#str do
    if(#str-k[5] >= i or not inv)then
      for inc=0,3 do
    if(i%4 == inc)then
      enc = enc .. convert(string.sub(str,i,i),k[inc+1],inv);
      break;
    end
      end
    end
  end
  if(not inv)then
    for i=1,k[5] do
      enc = enc .. string.char(math.random(32,126));
    end
  end
  return enc;
end
 
--// exportstring( string )
--// returns a "Lua" portable version of the string
local function exportstring( s )
    s = string.format( "%q",s )
    -- to replace
    s = string.gsub( s,"\\\n","\\n" )
    s = string.gsub( s,"\r","\\r" )
    s = string.gsub( s,string.char(26),"\"..string.char(26)..\"" )
    return s
end
--// The Save Function
function saveTable(  tbl,filename )
    local charS,charE = "   ","\n"
    local file,err
    -- create a pseudo file that writes to a string and return the string
    if not filename then
        file =  { write = function( self,newstr ) self.str = self.str..newstr end, str = "" }
        charS,charE = "",""
    -- write table to tmpfile
    elseif filename == true or filename == 1 then
        charS,charE,file = "","",io.tmpfile()
    -- write table to file
    -- use io.open here rather than io.output, since in windows when clicking on a file opened with io.output will create an error
    else
        file,err = io.open( filename, "w" )
        if err then return _,err end
    end
    -- initiate variables for save procedure
    local tables,lookup = { tbl },{ [tbl] = 1 }
    file:write( "return {"..charE )
    for idx,t in ipairs( tables ) do
        if filename and filename ~= true and filename ~= 1 then
            file:write( "-- Table: {"..idx.."}"..charE )
        end
        file:write( "{"..charE )
        local thandled = {}
        for i,v in ipairs( t ) do
            thandled[i] = true
            -- escape functions and userdata
            if type( v ) ~= "userdata" then
                -- only handle value
                if type( v ) == "table" then
                    if not lookup[v] then
                        table.insert( tables, v )
                        lookup[v] = #tables
                    end
                    file:write( charS.."{"..lookup[v].."},"..charE )
                elseif type( v ) == "function" then
                    file:write( charS.."loadstring("..exportstring(string.dump( v )).."),"..charE )
                else
                    local value =  ( type( v ) == "string" and exportstring( v ) ) or tostring( v )
                    file:write(  charS..value..","..charE )
                end
            end
        end
        for i,v in pairs( t ) do
            -- escape functions and userdata
            if (not thandled[i]) and type( v ) ~= "userdata" then
                -- handle index
                if type( i ) == "table" then
                    if not lookup[i] then
                        table.insert( tables,i )
                        lookup[i] = #tables
                    end
                    file:write( charS.."[{"..lookup[i].."}]=" )
                else
                    local index = ( type( i ) == "string" and "["..exportstring( i ).."]" ) or string.format( "[%d]",i )
                    file:write( charS..index.."=" )
                end
                -- handle value
                if type( v ) == "table" then
                    if not lookup[v] then
                        table.insert( tables,v )
                        lookup[v] = #tables
                    end
                    file:write( "{"..lookup[v].."},"..charE )
                elseif type( v ) == "function" then
                    file:write( "loadstring("..exportstring(string.dump( v )).."),"..charE )
                else
                    local value =  ( type( v ) == "string" and exportstring( v ) ) or tostring( v )
                    file:write( value..","..charE )
                end
            end
        end
        file:write( "},"..charE )
    end
    file:write( "}" )
    -- Return Values
    -- return stringtable from string
    if not filename then
        -- set marker for stringtable
        return file.str.."--|"
    -- return stringttable from file
    elseif filename == true or filename == 1 then
        file:seek ( "set" )
        -- no need to close file, it gets closed and removed automatically
        -- set marker for stringtable
        return file:read( "*a" ).."--|"
    -- close file and return 1
    else
        file:close()
        return 1
    end
end
 
--// The Load Function
function loadTable( sfile )
    local tables, err, _
    -- catch marker for stringtable
    if string.sub( sfile,-3,-1 ) == "--|" then
        tables,err = loadstring( sfile )
    else
        tables,err = loadfile( sfile )
    end
    if err then return _,err
    end
    tables = tables()
    for idx = 1,#tables do
        local tolinkv,tolinki = {},{}
        for i,v in pairs( tables[idx] ) do
            if type( v ) == "table" and tables[v[1]] then
                table.insert( tolinkv,{ i,tables[v[1]] } )
            end
            if type( i ) == "table" and tables[i[1]] then
                table.insert( tolinki,{ i,tables[i[1]] } )
            end
        end
        -- link values, first due to possible changes of indices
        for _,v in ipairs( tolinkv ) do
            tables[idx][v[1]] = v[2]
        end
        -- link indices
        for _,v in ipairs( tolinki ) do
            tables[idx][v[2]],tables[idx][v[1]] =  tables[idx][v[1]],nil
        end
    end
    return tables[1]
end
 
 
 
local function convert( chars, dist, inv )
  return string.char( ( string.byte( chars ) - 32 + ( inv and -dist or dist ) ) % 95 + 32 )
end
 
 
local function crypt(str,k,inv)
  local enc= "";
  for i=1,#str do
    if(#str-k[5] >= i or not inv)then
      for inc=0,3 do
    if(i%4 == inc)then
      enc = enc .. convert(string.sub(str,i,i),k[inc+1],inv);
      break;
    end
      end
    end
  end
  if(not inv)then
    for i=1,k[5] do
      enc = enc .. string.char(math.random(32,126));
    end
  end
  return enc;
end
 
 
function buttonCallback(guiID, id)
  local result = gui.getYesNo("", "Do you really want to exit?", "")
  if result == true then
    gui.exit()
  end
end
 
function eventCallback(ev, id)
  if ev == "cardInsert" then
    gui.setText(myGui, cardStatusLabel, "   Card present")
  elseif ev == "cardRemove" then
    gui.setText(myGui, cardStatusLabel, "     No card   ")
  end
end
 
function userListCallback(guiID, listID, selectedID, selectedText)
  gui.setText(myGui, userNameText, userTable[selectedID].name)
  gui.setText(myGui, userLevelLabel, tostring(userTable[selectedID].level))
  if userTable[selectedID].blocked == true then
    gui.setEnable(myGui, cardBlockedYesButton, false)
    gui.setEnable(myGui, cardBlockedNoButton, true)
  else
    gui.setEnable(myGui, cardBlockedYesButton, true)
    gui.setEnable(myGui, cardBlockedNoButton, false)
  end
  gui.setEnable(myGui, LevelUpButton, true)
  gui.setEnable(myGui, LevelDownButton, true)
  gui.setEnable(myGui, userNameText, true)
end
 
function updateServer()
  local data = ser.serialize(userTable)
  local crypted = crypt(data, cryptKey)
  if modem.isOpen(modemPort) == false then
    modem.open(modemPort)
  end
  modem.broadcast(modemPort, "updateuser", crypted)
end
 
 
function updateList()
  gui.clearList(myGui, userList)
  for key,value in pairs(userTable) do
    gui.insertList(myGui, userList, value.name)
  end
  saveTable(userTable, "userlist.txt")
  updateServer()
end
 
function blockUserCallback(guiID, id)
  local selected = gui.getSelected(myGui, userList)
  userTable[selected].blocked = true
  updateList()
  userListCallback(myGui, userList, selected)
end
 
function unblockUserCallback(guiID, id)
  local selected = gui.getSelected(myGui, userList)
  userTable[selected].blocked = false
  updateList()
  userListCallback(myGui, userList, selected)
end
 
function newUserCallback(guiID, id)
  local tmpTable = {["name"] = "new", ["blocked"] = false, ["level"] = 1, ["date"] = os.date()}
  table.insert(userTable, tmpTable)
  updateList()
end
 
function deleteUserCallback(guiID, id)
  local selected = gui.getSelected(myGui, userList)
  userTable[selected] = nil
  updateList()
  gui.setText(myGui, userNameText, "")
  gui.setText(myGui, userLevelLabel, "")
  gui.setEnable(myGui, cardBlockedYesButton, false)
  gui.setEnable(myGui, cardBlockedNoButton, false)
  gui.setEnable(myGui, LevelUpButton, false)
  gui.setEnable(myGui, LevelDownButton, false)
  gui.setEnable(myGui, userNameText, false)
end
 
function writeCardCallback(guiID, id)
  local selected = gui.getSelected(myGui, userList)
  local data =  userTable[selected].date .. " " .. userTable[selected].name .. " " .. tostring(userTable[selected].level) .. " " ..tostring(userTable[selected].blocked)
  local crypted = crypt(data, cryptKey)
  writer.write(crypted, "SECURITY", false)
end
 
function levelUpCallback(guiID, id)
  local selected = gui.getSelected(myGui, userList)
  if userTable[selected].level < 101 then
    userTable[selected].level = userTable[selected].level + 1
  end
  updateList()
  userListCallback(myGui, userList, selected)
end
 
function levelDownCallback(guiID, id)
  local selected = gui.getSelected(myGui, userList)
  if userTable[selected].level > 1 then
    userTable[selected].level = userTable[selected].level - 1
  end
  updateList()
  userListCallback(myGui, userList, selected)
end
 
function inputCallback(guiID, textID, text)
  local selected = gui.getSelected(myGui, userList)
  userTable[selected].name = text
  updateList()
  userListCallback(myGui, userList, selected)
end
 
-- main gui setup
myGui = gui.newGui(2, 2, 78, 23, true)
button = gui.newButton(myGui, "center", 21, "exit", buttonCallback)
 
-- frame with user list
gui.newFrame(myGui, 1, 1, 30, 18)
userList = gui.newList(myGui, 2, 2, 28, 16, {}, userListCallback)
userTable = loadTable("userlist.txt")
if userTable == nil then
  userTable = {}
end
updateList()
 
-- user infos
gui.newLabel(myGui, 32, 6, "User name : ")
gui.newLabel(myGui, 32, 8, "Level     : ")
gui.newLabel(myGui, 32, 10, "Blocked   : [yes] / [no]")
userNameText = gui.newText(myGui, 44, 6, 16, "", inputCallback)
userLevelLabel = gui.newLabel(myGui, 44, 8, "")
LevelUpButton = gui.newButton(myGui, 48, 8, "+", levelUpCallback)
LevelDownButton = gui.newButton(myGui, 52, 8, "-", levelDownCallback)
cardBlockedYesButton = gui.newButton(myGui, 44, 10, "yes", blockUserCallback)
cardBlockedNoButton = gui.newButton(myGui, 52, 10, "no", unblockUserCallback)
gui.setEnable(myGui, cardBlockedYesButton, false)
gui.setEnable(myGui, cardBlockedNoButton, false)
gui.setEnable(myGui, LevelUpButton, false)
gui.setEnable(myGui, LevelDownButton, false)
gui.setEnable(myGui, userNameText, false)
 
gui.newHLine(myGui, 32, 12, 43)
userNewButton = gui.newButton(myGui, 2, 21, "new", newUserCallback)
userDeleteButton = gui.newButton(myGui, 9, 21, "delete", deleteUserCallback)
 
-- frame with status of the writer
gui.newFrame(myGui, 57, 1, 19, 3, "Writer status")
cardStatusLabel = gui.newLabel(myGui, 58, 2, "     No card   ")
 
--updateServerButton = gui.newButton(myGui, 47, 21, "update server", updateServerCallback)
 
cardWriteButton = gui.newButton(myGui, 64, 21, "write card", writeCardCallback)
 
 
gui.clearScreen()
gui.setTop(prgName .. " " .. version)
 
event.listen("cardInsert", eventCallback)
event.listen("cardRemove", eventCallback)
while true do
  gui.runGui(myGui)
end

 

Link to post
Share on other sites

4 answers to this question

Recommended Posts

  • 0

@Molinko There isnt any error code the server checks if user is online then checks access level if its same or higher then the door access level then it says access granted now thats the part im having a issue with is with the door or server saying access granted as its not sending the data or what becuase the door says access denied

 

Link to post
Share on other sites
  • 0

I can't help you directly because I don't have OpenSecurity installed and you've already got too much code for me to walk through manually.
But here are a few hints:

  • Add debug output! (A lot!) You want to find out the values of important variables throughout your code.
  • Compare the output to what you would expect!
  • You can narrow down the area of the error because it must be somewhere after a correct output and before a wrong output.
  • Move your outputs closer to the error.
  • When you found the error fix it.
  • You can now remove all remaining debug output.

In this case this part of your controller is quite interesting:

 data = crypt(msg, cryptKey, true)
--    print(data)
      if data == "true" then
    term.write("Access granted\n")

A printout of msg, data and cryptKey in server and controller would be interesting. Since cryptKey is a table you can use serialization.serialize(cryptKey, true) to get a neat output.

On a side note, here is how you shouldn't do debug output:

for i = 1, 10 do
  print(i)
  local a = i * 2
  local b = i * a + 2
  print(a)
  a = a + 2
  print(a)
  print(b)
end

It is okay if you just check the value of one variable but it can confuse you a lot if you have long loops and many variables. (Which value belongs to which variable?)

It is much better if you add names and descriptions to your output:

for i = 1, 10 do
  print("new iteration i=",i)
  local a = i * 2
  local b = i * a + 2
  print("1 a=", a)
  a = a + 2
  print("2 a=", a)
  print("3 b=", b)
end

This way it is much easier to know which variable is being displayed and where the output comes from.

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use and Privacy Policy.