Class: Tanker::CTanker::CVerification

Inherits:
FFI::Struct
  • Object
show all
Defined in:
lib/tanker/c_tanker/c_verification.rb

Constant Summary collapse

TYPE_EMAIL =
1
TYPE_PASSPHRASE =
2
TYPE_VERIFICATION_KEY =
3
TYPE_OIDC_ID_TOKEN =
4
TYPE_PHONE_NUMBER =
5
TYPE_PREVERIFIED_EMAIL =
6
TYPE_PREVERIFIED_PHONE_NUMBER =
7
TYPE_E2E_PASSPHRASE =
8
TYPE_PREVERIFIED_OIDC =
9
TYPE_OIDC_AUTHORIZATION_CODE =
10

Instance Method Summary collapse

Constructor Details

#initialize(verification) ⇒ CVerification

rubocop:disable Metrics/MethodLength, Metrics/CyclomaticComplexity Not relevant for a case/when



109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
# File 'lib/tanker/c_tanker/c_verification.rb', line 109

def initialize(verification) # rubocop:disable Metrics/MethodLength, Metrics/CyclomaticComplexity Not relevant for a case/when
  super()

  unless verification.is_a? Tanker::Verification
    raise TypeError, 'Verification argument is not a Tanker::Verification'
  end

  # NOTE: Instance variables are required to keep the CStrings alive
  case verification
  when Tanker::EmailVerification
    self[:type] = TYPE_EMAIL
    self[:email_verification] = CEmailVerification.new verification.email, verification.verification_code
  when Tanker::PassphraseVerification
    @passphrase = CTanker.new_cstring verification.passphrase
    self[:type] = TYPE_PASSPHRASE
    self[:passphrase] = @passphrase
  when Tanker::VerificationKeyVerification
    @verification_key = CTanker.new_cstring verification.verification_key
    self[:type] = TYPE_VERIFICATION_KEY
    self[:verification_key] = @verification_key
  when Tanker::OIDCIDTokenVerification
    @oidc_id_token = CTanker.new_cstring verification.oidc_id_token
    self[:type] = TYPE_OIDC_ID_TOKEN
    self[:oidc_id_token] = @oidc_id_token
  when Tanker::PhoneNumberVerification
    self[:type] = TYPE_PHONE_NUMBER
    self[:phone_number_verification] =
      CPhoneNumberVerification.new verification.phone_number, verification.verification_code
  when Tanker::PreverifiedEmailVerification
    @preverified_email = CTanker.new_cstring verification.preverified_email
    self[:type] = TYPE_PREVERIFIED_EMAIL
    self[:preverified_email] = @preverified_email
  when Tanker::PreverifiedPhoneNumberVerification
    @preverified_phone_number = CTanker.new_cstring verification.preverified_phone_number
    self[:type] = TYPE_PREVERIFIED_PHONE_NUMBER
    self[:preverified_phone_number] = @preverified_phone_number
  when Tanker::E2ePassphraseVerification
    @e2e_passphrase = CTanker.new_cstring verification.e2e_passphrase
    self[:type] = TYPE_E2E_PASSPHRASE
    self[:e2e_passphrase] = @e2e_passphrase
  when Tanker::PreverifiedOIDCVerification
    @preverified_oidc = COIDCVerification.new verification.subject, verification.provider_id
    self[:type] = TYPE_PREVERIFIED_OIDC
    self[:preverified_oidc] = @preverified_oidc
  when Tanker::OIDCAuthorizationCodeVerification
    self[:type] = TYPE_OIDC_AUTHORIZATION_CODE
    self[:oidc_authorization_code_verification] = COIDCAuthorizationCodeVerification.new(
      verification.provider_id,
      verification.authorization_code,
      verification.state
    )
  else
    raise ArgumentError, 'Unknown Tanker::Verification type!'
  end

  self[:version] = 8
end