cross-posted from: https://lemmy.nz/post/4294116

I have a file with content like this:

item({
     ["attr"] = {
        ["size"] = "62091";
        ["filename"] = "qBuUP9-OTfuzibt6PQX4-g.jpg";
        ["stamp"] = "2023-12-05T19:31:37Z";
        ["xmlns"] = "urn:xmpp:http:upload:0";
        ["content-type"] = "image/jpeg";
     };
     ["key"] = "Wa4AJWFldqRZjBozponbSLRZ";
     ["with"] = "email@address";
     ["when"] = 1701804697;
     ["name"] = "request";
});

I need to know what format this is, and if there exists a tool in linux already to parse this or if I need to write one myself?

Thanks!

  • flubba86@lemmy.world
    link
    fedilink
    arrow-up
    40
    ·
    2 年前

    It’s not really a standalone file format, it’s executable Lua code.

    It returns a new item with the given table contents.

    That syntax with the keys in square brackets is the “long-form” method of creating a new table, that’s allows the use of spaces and dashes in the key name.

    https://stackoverflow.com/questions/34687498/what-is-the-function-of-square-brackets-around-table-keys-in-lua

    Maybe this is the lua-equivelent of a python Pickle file?

      • vrighter
        link
        fedilink
        arrow-up
        5
        ·
        2 年前

        assuming you run it in the right lua environment. The item function must be defined, and we’re only speculating about its return value without seeing proper docs, or the source

        • ∟⊔⊤∦∣≶@lemmy.nzOP
          link
          fedilink
          arrow-up
          5
          ·
          2 年前

          Item is a function?

          Well actually, yeah thats kinda obvious isn’t it now I look at the whole thing.

          Thats fine, I’ll just use a bit of the old sed and json it.

          Aha I have avoided learning Lua yet again!

          • vrighter
            link
            fedilink
            arrow-up
            2
            ·
            2 年前

            the code is constructing a table, and passing it to a function called item. But if all you need is the data, you can just remove the function call and assign the table to a variable like so: local myvar = {…}.

            then you can just manipulate the table as usual.

            • ∟⊔⊤∦∣≶@lemmy.nzOP
              link
              fedilink
              arrow-up
              3
              ·
              2 年前

              Unfortunately, this sequence is repeated many many times, so I would need to do a for-each and construct a new table for each inner section…

              There’s gotta be a better way. Time to read the source code and hijack whatever item() is doing.

            • vrighter
              link
              fedilink
              arrow-up
              3
              arrow-down
              1
              ·
              2 年前

              actually those semicolons indicate this isn’t actually lua, they are invalid in table constructors afaik

    • Jummit@lemmy.one
      link
      fedilink
      arrow-up
      3
      arrow-down
      1
      ·
      edit-2
      2 年前

      This isn’t Lua code, Lua requires commas as separators for table items.

      EDIT: Retracted, it seems like Lua allows this madness

  • 56!@lemmy.ml
    link
    fedilink
    arrow-up
    3
    ·
    2 年前

    I think it’s just normal Lua code.

    Here’s a quick json converter (based on https://stackoverflow.com/a/55575074), assuming you have lua installed:

    local function to_json(obj)
        local result = {}
        for key, value in pairs(obj) do
            if type(value) == "string" then
                value = string.format("\"%s\"", value)
            elseif type(value) == "table" then
                value = to_json(value)
            end
            table.insert(result, string.format("\"%s\":%s", key, value))
        end
        return "{" .. table.concat(result, ",") .. "}"
    end
    
    function item(obj)
        print(to_json(obj))
    end
    
    dofile(arg[1])
    

    It just defines the item function to print json, and executes the data file.

    arg[1], the first command line argument, is the path to the data file:

    $  lua to_json.lua path/to/datafile.list
    

    and pipe the output to something.json or whatever else you want to do.

  • Saganaki@lemmy.one
    link
    fedilink
    arrow-up
    6
    arrow-down
    5
    ·
    2 年前

    Looks like somebody rewrote json to require brackets around keys and to require semicolons? Very likely custom.

    • ∟⊔⊤∦∣≶@lemmy.nzOP
      link
      fedilink
      arrow-up
      1
      ·
      2 年前

      Not to worry; there’s definitely no sensitive information in here and it’s from a preprod environment.

      (If you’re able to figure out a way to use that key field, you’re either going to get shot by the FBI or hired by the CIA.)

      It is a file created that records information about files in another folder. I just want to extract some values from it. I would have expected this to be in like, xml or json. I believe the program that generated this file is written in Lua, but I don’t know Lua.

      • Rikudou_Sage@lemmings.world
        link
        fedilink
        arrow-up
        1
        ·
        2 年前

        Security by obscurity is no security at all. You should really invalidate and change the key. I personally would fire you if I ever found out you leaked credentials and then did nothing about it.

        • ∟⊔⊤∦∣≶@lemmy.nzOP
          link
          fedilink
          arrow-up
          1
          ·
          2 年前

          This isn’t even an encryption key. It’s a unique name generated for the image. My guess is it uses the word ‘key’ because the ‘value’ is the image file.

          This is also my preprod environment.