Sha256: 1d89c6b99766ee9387cfb44326d3a581801bc3e21e40965d9f6935474946ceaf

Contents?: true

Size: 1.33 KB

Versions: 1

Compression:

Stored size: 1.33 KB

Contents

module Keepassx
  class EntryField
     FIELD_TYPES = [
       [0x0, 'ignored', :null],
       [0x1, 'uuid', :ascii],
       [0x2, 'groupid', :int],
       [0x3, 'imageid', :int],
       [0x4, 'title', :string],
       [0x5, 'url', :string],
       [0x6, 'username', :string],
       [0x7, 'password', :string],
       [0x8, 'notes', :string],
       [0x9, 'creation_time', :date],
       [0xa, 'last_mod_time', :date],
       [0xb, 'last_acc_time', :date],
       [0xc, 'expiration_time', :date],
       [0xd, 'binary_desc', :string],
       [0xe, 'binary_data', :shunt],
       [0xFFFF, 'terminator', :nil]
    ]
    FIELD_TERMINATOR = 0xFFFF
    TYPE_CODE_FIELD_SIZE = 2   # unsigned short integer
    DATA_LENGTH_FIELD_SIZE = 4 # unsigned integer


    attr_reader :name, :data_type, :data

    def initialize(payload)
      type_code, @data_length = payload.read(TYPE_CODE_FIELD_SIZE + DATA_LENGTH_FIELD_SIZE).unpack('SI')
      @name, @data_type = _parse_type_code(type_code)
      @data = payload.read(@data_length)
    end

    def terminator?
      name == 'terminator'
    end

    def length
      TYPE_CODE_FIELD_SIZE + DATA_LENGTH_FIELD_SIZE + @data_length
    end

    def _parse_type_code(type_code)
      (_, name, data_type) = FIELD_TYPES.detect do |(code, *rest)|
        code == type_code
      end
      [name, data_type]
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
keepassx-0.1.0 lib/keepassx/entry_field.rb