summaryrefslogtreecommitdiff
path: root/lib/gitlab/auth/u2f_webauthn_converter.rb
blob: 20b5d2ddc885f8bd18ca9eb972e534c34051471e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# frozen_string_literal: true

require 'webauthn/u2f_migrator'

module Gitlab
  module Auth
    class U2fWebauthnConverter
      def initialize(u2f_registration)
        @u2f_registration = u2f_registration
      end

      def convert
        now = Time.current

        converted_credential = WebAuthn::U2fMigrator.new(
          app_id: Gitlab.config.gitlab.url,
          certificate: u2f_registration.certificate,
          key_handle: u2f_registration.key_handle,
          public_key: u2f_registration.public_key,
          counter: u2f_registration.counter
        ).credential

        {
          credential_xid: Base64.strict_encode64(converted_credential.id),
          public_key: Base64.strict_encode64(converted_credential.public_key),
          counter: u2f_registration.counter || 0,
          name: u2f_registration.name || '',
          user_id: u2f_registration.user_id,
          u2f_registration_id: u2f_registration.id,
          created_at: now,
          updated_at: now
        }
      end

      private

      attr_reader :u2f_registration
    end
  end
end