27 lines
831 B
Ruby
27 lines
831 B
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
module Gitlab
|
||
|
module Database
|
||
|
# Class for casting binary data to int.
|
||
|
#
|
||
|
# Using X509SerialNumberAttribute allows you to store X509 certificate
|
||
|
# serial number values as binary while still using integer to access them.
|
||
|
# rfc 5280 - 4.1.2.2 Serial number (20 octets is the maximum), could be:
|
||
|
# - 1461501637330902918203684832716283019655932542975
|
||
|
# - 0xffffffffffffffffffffffffffffffffffffffff
|
||
|
class X509SerialNumberAttribute < ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Bytea
|
||
|
PACK_FORMAT = 'H*'
|
||
|
|
||
|
def deserialize(value)
|
||
|
value = super(value)
|
||
|
value ? value.unpack1(PACK_FORMAT).to_i : nil
|
||
|
end
|
||
|
|
||
|
def serialize(value)
|
||
|
arg = value ? [value.to_s].pack(PACK_FORMAT) : nil
|
||
|
super(arg)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|