snapshot of https://github.com/ory/kratos.git (master, 2026-09-15; blobs > 131072B omitted)
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
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
This commit is contained in:
116
embedx/embedx.go
Normal file
116
embedx/embedx.go
Normal file
@@ -0,0 +1,116 @@
|
||||
// Copyright © 2023 Ory Corp
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
package embedx
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
_ "embed"
|
||||
"io"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"github.com/tidwall/gjson"
|
||||
|
||||
"github.com/ory/x/configx"
|
||||
"github.com/ory/x/otelx"
|
||||
)
|
||||
|
||||
//go:embed config.schema.json
|
||||
var ConfigSchema []byte
|
||||
|
||||
//go:embed identity_meta.schema.json
|
||||
var IdentityMetaSchema []byte
|
||||
|
||||
//go:embed identity_extension.schema.json
|
||||
var IdentityExtensionSchema []byte
|
||||
|
||||
type SchemaType int
|
||||
|
||||
const (
|
||||
Config SchemaType = iota + 1
|
||||
IdentityMeta
|
||||
IdentityExtension
|
||||
)
|
||||
|
||||
type Schema struct {
|
||||
id string
|
||||
data []byte
|
||||
dependencies []*Schema
|
||||
}
|
||||
|
||||
var (
|
||||
identityExt = &Schema{
|
||||
id: gjson.GetBytes(IdentityExtensionSchema, "$id").Str,
|
||||
data: IdentityExtensionSchema,
|
||||
dependencies: nil,
|
||||
}
|
||||
|
||||
schemas = map[SchemaType]*Schema{
|
||||
Config: {
|
||||
id: gjson.GetBytes(ConfigSchema, "$id").Str,
|
||||
data: ConfigSchema,
|
||||
dependencies: nil,
|
||||
},
|
||||
IdentityMeta: {
|
||||
id: gjson.GetBytes(IdentityMetaSchema, "$id").Str,
|
||||
data: IdentityMetaSchema,
|
||||
dependencies: []*Schema{
|
||||
identityExt,
|
||||
},
|
||||
},
|
||||
IdentityExtension: identityExt,
|
||||
}
|
||||
)
|
||||
|
||||
func getSchema(schema SchemaType) (*Schema, error) {
|
||||
if val, ok := schemas[schema]; ok {
|
||||
return val, nil
|
||||
}
|
||||
return nil, errors.Errorf("the specified schema type (%d) is not supported", int(schema))
|
||||
}
|
||||
|
||||
func (s SchemaType) GetSchemaID() string {
|
||||
return schemas[s].id
|
||||
}
|
||||
|
||||
// AddSchemaResources adds the specified schemas including their dependencies to the compiler.
|
||||
// The interface is specified instead of `jsonschema.Compiler` to allow the use of any jsonschema library fork or version.
|
||||
func AddSchemaResources(c interface {
|
||||
AddResource(url string, r io.Reader) error
|
||||
}, opts ...SchemaType) error {
|
||||
var sc []*Schema
|
||||
|
||||
for _, o := range opts {
|
||||
s, err := getSchema(o)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
sc = append(sc, s)
|
||||
}
|
||||
|
||||
if err := addSchemaResources(c, sc); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := otelx.AddConfigSchema(c); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return configx.AddSchemaResources(c)
|
||||
}
|
||||
|
||||
func addSchemaResources(c interface {
|
||||
AddResource(url string, r io.Reader) error
|
||||
}, schemas []*Schema) error {
|
||||
for _, s := range schemas {
|
||||
if err := c.AddResource(s.id, bytes.NewReader(s.data)); err != nil {
|
||||
return errors.WithStack(err)
|
||||
}
|
||||
if s.dependencies != nil {
|
||||
if err := addSchemaResources(c, s.dependencies); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user