Skip to content

Repository files navigation

Go Mobile-ID client

Golang client for the Mobile-ID API (https://www.mobile-id.lt/en/). It is a simple wrapper around the API, which helps easily integrate Mobile-ID authentication into Golang applications.

Features

  • Flexible client configuration
  • Concurrent processing
  • Optional TLS configuration (certificate pinning)

Installation

Use go get to install the package

go get -u github.com/tab/mobileid

Usage

Creating a Client

Create a new client using NewClient() and customize its configuration using chainable methods.

package main
import (
"context""log""time""github.com/tab/mobileid"
)
funcmain() {
client:=mobileid.NewClient().
WithRelyingPartyName("DEMO").
WithRelyingPartyUUID("00000000-0000-0000-0000-000000000000").
WithHashType("SHA512").
WithText("Enter PIN1").
WithTextFormat("GSM-7").
WithLanguage("ENG").
WithURL("https://tsp.demo.sk.ee/mid-api").
WithTimeout(60*time.Second)
iferr:=client.Validate(); err!=nil {
log.Fatal("Invalid configuration:", err)
}
// Further processing...
}

Start Authentication

Initiate a new authentication session with the Mobile-ID provider by calling CreateSession. This function generates a random hash, constructs the session request, and returns a session that includes an identifier and a verification code.

funcmain() {
// Create a client...phoneNumber:="+37268000769"identity:="60001017869"session, err:=client.CreateSession(context.Background(), phoneNumber, identity)
iferr!=nil {
log.Fatal("Error creating session:", err)
}
fmt.Println("Session created:", session)
}

Fetch Session

funcmain() {
// Create a client...person, err:=client.FetchSession(context.Background(), sessionId)
iferr!=nil {
log.Fatal("Error fetching session:", err)
}
fmt.Println("Session status:", session.State)
}

Async Example

For applications requiring the processing of multiple authentication sessions simultaneously, Mobile-ID provides a worker model. Create a worker using NewWorker, configure its concurrency and queue size, and then start processing.

package main
import (
"context""fmt""sync""time""github.com/tab/mobileid"
)
funcmain() {
client:=mobileid.NewClient().
WithRelyingPartyName("DEMO").
WithRelyingPartyUUID("00000000-0000-0000-0000-000000000000").
WithHashType("SHA512").
WithText("Enter PIN1").
WithTextFormat("GSM-7").
WithLanguage("ENG").
WithURL("https://tsp.demo.sk.ee/mid-api").
WithTimeout(60*time.Second)
identities:=map[string]string{
"51307149560": "+37269930366",
"60001017869": "+37268000769",
"60001018800": "+37200000566",
"60001019939": "+37200000266",
"60001019947": "+37207110066",
"60001019950": "+37201100266",
"60001019961": "+37200000666",
"60001019972": "+37201200266",
"60001019983": "+37213100266",
"50001018908": "+37266000266",
}
worker:=mobileid.NewWorker(client).
WithConcurrency(50).
WithQueueSize(100)
ctx:=context.Background()
worker.Start(ctx)
deferworker.Stop()
varwg sync.WaitGroupforidentity, phoneNumber:=rangeidentities {
wg.Add(1)
session, err:=client.CreateSession(ctx, phoneNumber, identity)
iferr!=nil {
fmt.Println("Error creating session:", err)
wg.Done()
}
fmt.Println("Session created:", session)
resultCh:=worker.Process(ctx, session.Id)
gofunc() {
deferwg.Done()
result:=<-resultChifresult.Err!=nil {
fmt.Println("Error fetching session:", result.Err)
} else {
fmt.Println("Fetched person:", result.Person)
}
}()
}
wg.Wait()
}

Certificate pinning (optional)

package main
import (
"context""fmt""sync""time""github.com/tab/mobileid"
)
funcmain() {
manager, err:=mobileid.NewCertificateManager("./certs")
iferr!=nil {
fmt.Println("Failed to create certificate manager:", err)
}
tlsConfig:=manager.TLSConfig()
client:=mobileid.NewClient().
WithRelyingPartyName("DEMO").
WithRelyingPartyUUID("00000000-0000-0000-0000-000000000000").
WithHashType("SHA512").
WithText("Enter PIN1").
WithTextFormat("GSM-7").
WithLanguage("ENG").
WithURL("https://tsp.demo.sk.ee/mid-api").
WithTimeout(60*time.Second).
WithTLSConfig(tlsConfig)
// Further processing...

Documentation

License

Distributed under the MIT License. See LICENSE for more information.

Acknowledgements

About

Go client for the Mobile-ID API

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages