Usage
Configure 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"
)
func main() {
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)
if err := client.Validate(); err != nil {
log.Fatal("Invalid configuration:", err)
}
// Further processing...
}
Check client default configuration values:
const (
Text = "Enter PIN1"
TextFormat = "GSM-7"
Language = "ENG"
Timeout = requests.Timeout
URL = "https://tsp.demo.sk.ee/mid-api"
)
cfg := &config.Config{
HashType: utils.HashTypeSHA512,
Text: Text,
TextFormat: TextFormat,
Language: Language,
URL: URL,
Timeout: Timeout,
}
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.
func main() {
// Create a client...
phoneNumber := "+37268000769"
identity := "60001017869"
session, err := client.CreateSession(context.Background(), phoneNumber, identity)
if err != nil {
log.Fatal("Error creating session:", err)
}
fmt.Println("Session created:", session)
}
Fetch authentication session
func main() {
// Create a client...
person, err := client.FetchSession(context.Background(), sessionId)
if err != 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"
)
func main() {
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)
defer worker.Stop()
var wg sync.WaitGroup
for identity, phoneNumber := range identities {
wg.Add(1)
session, err := client.CreateSession(ctx, phoneNumber, identity)
if err != nil {
fmt.Println("Error creating session:", err)
wg.Done()
}
fmt.Println("Session created:", session)
resultCh := worker.Process(ctx, session.Id)
go func() {
defer wg.Done()
result := <-resultCh
if result.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"
)
func main() {
manager, err := mobileid.NewCertificateManager("./certs")
if err != 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...
Session created: &{b2769811-16de-42f1-a06e-c580d07c1298 5960}
Fetched person: &{PNOEE-60001017869 60001017869 EID2016 TESTNUMBER}
- b2769811-16de-42f1-a06e-c580d07c1298 – session id
-
5960 – verification code
-
PNOEE-60001017869 – formatted identity
- 60001017869 – personal identification code
- EID2016 – person first name
- TESTNUMBER – person last name