Class: EeIdVerification::Verifier
- Inherits:
-
Object
- Object
- EeIdVerification::Verifier
- Defined in:
- lib/ee_id_verification.rb
Overview
Main verifier class
Instance Method Summary collapse
-
#authenticate ⇒ AuthenticationSession
Start authentication process.
-
#available? ⇒ Boolean
Check if Estonian ID card authentication is available.
-
#complete_authentication(session, pin) ⇒ AuthenticationResult
Complete authentication with PIN.
-
#initialize ⇒ Verifier
constructor
Initialize the verifier.
Constructor Details
#initialize ⇒ Verifier
Initialize the verifier
39 40 41 42 |
# File 'lib/ee_id_verification.rb', line 39 def initialize @reader = CertificateReader.new @sessions = {} end |
Instance Method Details
#authenticate ⇒ AuthenticationSession
Start authentication process
52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/ee_id_verification.rb', line 52 def authenticate raise Error, "No Estonian ID card detected" unless available? session = AuthenticationSession.new( id: SecureRandom.hex(16), method: :digidoc_local, status: :waiting_for_pin, created_at: Time.now, expires_at: Time.now + 300 ) @sessions[session.id] = session session end |
#available? ⇒ Boolean
Check if Estonian ID card authentication is available
46 47 48 |
# File 'lib/ee_id_verification.rb', line 46 def available? @reader.card_present? end |
#complete_authentication(session, pin) ⇒ AuthenticationResult
Complete authentication with PIN
71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
# File 'lib/ee_id_verification.rb', line 71 def complete_authentication(session, pin) stored_session = @sessions[session.id] return failed_result(session.id, "Session not found") unless stored_session return failed_result(session.id, "Session expired") if session.expired? begin @reader.connect cert = @reader.read_auth_certificate(pin) personal_data = @reader.extract_personal_data(cert) @sessions.delete(session.id) AuthenticationResult.new( session_id: session.id, status: :completed, authenticated: true, personal_code: personal_data[:personal_code], given_name: personal_data[:given_name], surname: personal_data[:surname], country: personal_data[:country] ) rescue StandardError => e failed_result(session.id, e.) ensure begin @reader.disconnect rescue StandardError nil end end end |