Files
upstream-ory-kratos/corpx/faker.go
upstream-mirror c60cc7ca75
Some checks failed
CI / Run tests and lints (push) Failing after 29s
CI / Build CLI docs (push) Has been skipped
CI / Run Playwright end-to-end tests (mysql) (push) Failing after 3s
CI / Run Playwright end-to-end tests (postgres) (push) Failing after 2s
CI / Run Playwright end-to-end tests (sqlite) (push) Failing after 3s
CodeQL / Analyze (go) (push) Failing after 4s
CodeQL / Analyze (javascript) (push) Failing after 3s
Docker Image Scanners / scanners (push) Failing after 4s
Synchronize Issue Labels / Synchronize Issue Labels (push) Has been skipped
CI / Run end-to-end tests (postgres) (push) Failing after 19s
CI / Run end-to-end tests (sqlite) (push) Failing after 2s
CI / Run Playwright end-to-end tests (cockroach) (push) Failing after 2s
CI / Draft newsletter (push) Has been skipped
CI / Generate release (push) Has been skipped
CI / Pending approval Slack notification (push) Has been skipped
CI / Send newsletter (push) Has been skipped
snapshot of https://github.com/ory/kratos.git (master, 2026-09-15; blobs > 131072B omitted)
2026-09-15 21:19:12 +05:00

158 lines
3.9 KiB
Go

// Copyright © 2023 Ory Corp
// SPDX-License-Identifier: Apache-2.0
// #nosec G404 -- used in tests only
package corpx
import (
"math/rand"
"net/http"
"reflect"
"sync"
"time"
"github.com/go-faker/faker/v4"
"github.com/ory/kratos/identity"
"github.com/ory/kratos/selfservice/flow"
"github.com/ory/kratos/session"
"github.com/ory/kratos/ui/node"
"github.com/ory/kratos/x"
"github.com/ory/x/randx"
)
var setup sync.Once
func RegisterFakes() {
setup.Do(registerFakes)
}
func registerFakes() {
_ = faker.SetRandomMapAndSliceSize(4)
if err := faker.AddProvider("ptr_geo_location", func(v reflect.Value) (interface{}, error) {
return new("Munich, Germany"), nil
}); err != nil {
panic(err)
}
if err := faker.AddProvider("ptr_ipv4", func(v reflect.Value) (interface{}, error) {
return new(faker.IPv4()), nil
}); err != nil {
panic(err)
}
if err := faker.AddProvider("birthdate", func(v reflect.Value) (interface{}, error) {
return time.Now().Add(time.Duration(rand.Int())).Round(time.Second).UTC(), nil
}); err != nil {
panic(err)
}
if err := faker.AddProvider("time_types", func(v reflect.Value) (interface{}, error) {
es := make([]time.Time, rand.Intn(5))
for k := range es {
es[k] = time.Now().Add(time.Duration(rand.Int())).Round(time.Second).UTC()
}
return es, nil
}); err != nil {
panic(err)
}
if err := faker.AddProvider("http_header", func(v reflect.Value) (interface{}, error) {
headers := http.Header{}
for i := 0; i <= rand.Intn(5); i++ {
values := make([]string, rand.Intn(4)+1)
for k := range values {
values[k] = randx.MustString(8, randx.AlphaNum)
}
headers[randx.MustString(8, randx.AlphaNum)] = values
}
return headers, nil
}); err != nil {
panic(err)
}
if err := faker.AddProvider("http_method", func(v reflect.Value) (interface{}, error) {
methods := []string{"POST", "PUT", "GET", "PATCH"}
return methods[rand.Intn(len(methods))], nil
}); err != nil {
panic(err)
}
if err := faker.AddProvider("identity_credentials_type", func(v reflect.Value) (interface{}, error) {
methods := []identity.CredentialsType{identity.CredentialsTypePassword, identity.CredentialsTypePassword}
return string(methods[rand.Intn(len(methods))]), nil
}); err != nil {
panic(err)
}
if err := faker.AddProvider("string", func(v reflect.Value) (interface{}, error) {
return randx.MustString(25, randx.AlphaNum), nil
}); err != nil {
panic(err)
}
if err := faker.AddProvider("time_type", func(v reflect.Value) (interface{}, error) {
return time.Now().Add(time.Duration(rand.Int())).Round(time.Second).UTC(), nil
}); err != nil {
panic(err)
}
if err := faker.AddProvider("ui_node_attributes", func(v reflect.Value) (interface{}, error) {
var a node.Attributes
switch rand.Intn(4) {
case 0:
a = new(node.InputAttributes)
case 1:
a = new(node.ImageAttributes)
case 2:
a = new(node.AnchorAttributes)
case 3:
a = new(node.TextAttributes)
}
if err := faker.FakeData(a); err != nil {
return nil, err
}
return a, nil
}); err != nil {
panic(err)
}
if err := faker.AddProvider("uuid", func(v reflect.Value) (interface{}, error) {
return x.NewUUID(), nil
}); err != nil {
panic(err)
}
if err := faker.AddProvider("identity", func(v reflect.Value) (interface{}, error) {
var i identity.Identity
return &i, faker.FakeData(&i)
}); err != nil {
panic(err)
}
if err := faker.AddProvider("flow_type", func(v reflect.Value) (interface{}, error) {
if rand.Intn(2) == 0 {
return flow.TypeAPI, nil
}
return flow.TypeBrowser, nil
}); err != nil {
panic(err)
}
if err := faker.AddProvider("session_device", func(v reflect.Value) (interface{}, error) {
var d session.Device
return &d, faker.FakeData(&d)
}); err != nil {
panic(err)
}
if err := faker.AddProvider("aal_type", func(v reflect.Value) (interface{}, error) {
return "aal1", nil
}); err != nil {
panic(err)
}
}