diff --git a/.air.toml b/.air.toml index d19d21810..1fc4c2ec2 100644 --- a/.air.toml +++ b/.air.toml @@ -7,11 +7,11 @@ delay = 1000 cmd = "devbox run build:motr" exclude_dir = ["assets", "tmp", "vendor", "testdata"] exclude_file = [] -exclude_regex = ["_test.go"] +exclude_regex = ["_test.go", ".pk.go", "_templ.go", ".pb.go"] exclude_unchanged = true follow_symlink = false -full_bin = "bunx wrangler -c ./cmd/motr/wrangler.toml dev" -include_dir = ["cmd/dwn", "cmd/motr", "internal", "models", "pkl"] +full_bin = "bunx wrangler -c ./web/wrangler.toml dev" +include_dir = ["web", "internal/dwn", "pkl"] include_ext = ["go", "templ", "html", "pkl", "js", "mjs"] include_file = [ "wrangler.toml", @@ -26,7 +26,7 @@ log = "build-errors.log" poll = false poll_interval = 0 post_cmd = [] -pre_cmd = ["templ generate"] +pre_cmd = ["templ generate", "devbox run gen:pkl"] rerun = false rerun_delay = 500 send_interrupt = false diff --git a/.cz.toml b/.cz.toml index 6a3f5e1cd..134eb4e72 100644 --- a/.cz.toml +++ b/.cz.toml @@ -2,6 +2,6 @@ name = "cz_conventional_commits" tag_format = "v$version" version_scheme = "semver" -version = "0.1.1" +version = "v0.1.0" update_changelog_on_bump = true major_version_zero = true diff --git a/.github/workflows/buf-publish.yml b/.github/workflows/buf-publish.yml index 6c14104fc..1c7fe2d07 100644 --- a/.github/workflows/buf-publish.yml +++ b/.github/workflows/buf-publish.yml @@ -32,5 +32,5 @@ jobs: r2-access-key-id: ${{ secrets.R2_ACCESS_KEY_ID }} r2-secret-access-key: ${{ secrets.R2_SECRET_ACCESS_KEY }} r2-bucket: pkljar - source-dir: pkl + source-dir: config/pkl destination-dir: . diff --git a/Dockerfile b/Dockerfile index 3f927f3de..69daa6b83 100644 --- a/Dockerfile +++ b/Dockerfile @@ -86,8 +86,4 @@ WORKDIR /opt # rest server, tendermint p2p, tendermint rpc EXPOSE 1317 26656 26657 6060 -<<<<<<< HEAD -CMD ["test_node.sh"] -======= ENTRYPOINT ["/usr/bin/sonrd"] ->>>>>>> master diff --git a/Makefile b/Makefile index 03fc8475f..5fae273d2 100644 --- a/Makefile +++ b/Makefile @@ -303,11 +303,11 @@ sh-testnet: mod-tidy dwn: @echo "(dwn) Building dwn.wasm -> IPFS Vault" - GOOS=js GOARCH=wasm go build -o ./internal/vfs/dwn.wasm ./cmd/dwn + GOOS=js GOARCH=wasm go build -o ./internal/vfs/dwn.wasm ./internal/dwn/dwn.go motr: - @echo "(motr) Building app.wasm -> Deploy to Cloudflare Workers" - GOOS=js GOARCH=wasm go build -o ./cmd/motr/build/app.wasm ./cmd/motr/main.go + @echo "(web) Building app.wasm -> Deploy to Cloudflare Workers" + GOOS=js GOARCH=wasm go build -o ./web/build/app.wasm ./web/main.go ############################################################################### ### help ### diff --git a/cmd/dwn/main.go b/cmd/dwn/main.go deleted file mode 100644 index 51a42fc4c..000000000 --- a/cmd/dwn/main.go +++ /dev/null @@ -1,40 +0,0 @@ -//go:build js && wasm -// +build js,wasm - -package main - -import ( - "github.com/labstack/echo/v4" - "github.com/onsonr/sonr/internal/vfs/wasm" - - "github.com/onsonr/sonr/internal/db" -) - -var dwn *DWN - -type DWN struct { - *echo.Echo - DB *db.DB -} - -func main() { - dwn = initRails() - wasm.Serve(dwn.Echo) -} - -// initRails initializes the Rails application -func initRails() *DWN { - // Open the database - e := echo.New() - db, err := db.New() - if err != nil { - panic(err.Error()) - } - db.ServeEcho(e.Group("/dwn")) - - // Initialize the htmx handler - return &DWN{ - Echo: e, - DB: db, - } -} diff --git a/pkl/orm.pkl b/config/pkl/orm.pkl similarity index 76% rename from pkl/orm.pkl rename to config/pkl/orm.pkl index 86bc5e06f..7fd200663 100644 --- a/pkl/orm.pkl +++ b/config/pkl/orm.pkl @@ -1,6 +1,6 @@ -@go.Package { name = "github.com/onsonr/sonr/internal/db/orm" } +@go.Package { name = "github.com/onsonr/sonr/internal/dwn/models" } -module orm +module models import "package://pkg.pkl-lang.org/pkl-go/pkl.golang@0.5.0#/go.pkl" @@ -225,3 +225,52 @@ class Permission { updatedAt: String? } + + + +class DiscoveryDocument { + @JsonField + issuer: String + + @JsonField + authorization_endpoint: String + + @JsonField + token_endpoint: String + + @JsonField + userinfo_endpoint: String + + @JsonField + jwks_uri: String + + @JsonField + registration_endpoint: String + + @JsonField + scopes_supported: List + + @JsonField + response_types_supported: List + + @JsonField + response_modes_supported: List + + @JsonField + subject_types_supported: List + + @JsonField + id_token_signing_alg_values_supported: List + + @JsonField + claims_supported: List + + @JsonField + grant_types_supported: List + + @JsonField + acr_values_supported: List + + @JsonField + token_endpoint_auth_methods_supported: List +} diff --git a/pkl/txns.pkl b/config/pkl/txns.pkl similarity index 98% rename from pkl/txns.pkl rename to config/pkl/txns.pkl index beda46381..4fb6a6a90 100644 --- a/pkl/txns.pkl +++ b/config/pkl/txns.pkl @@ -1,4 +1,4 @@ -@go.Package { name = "github.com/onsonr/sonr/x/did/types/txns" } +@go.Package { name = "github.com/onsonr/sonr/internal/dwn/txns" } module txns diff --git a/devbox.json b/devbox.json index 0ed993263..1ad00b6b1 100644 --- a/devbox.json +++ b/devbox.json @@ -3,20 +3,18 @@ "packages": [ "go@1.22", "templ@latest", - "go-task@latest", - "templ@latest", "bun@latest", "ipfs-cluster@latest", "air@latest", "commitizen@latest" ], "env": { - "GOPATH": "$HOME/go", - "PATH": "$HOME/go/bin:$PATH", + "GOPATH": "$HOME/go", + "PATH": "$HOME/go/bin:$PATH", "CHAIN_ID": "sonr-testnet-1", - "DENOM": "usnr", - "KEYRING": "test", - "MONIKER": "florence" + "DENOM": "usnr", + "KEYRING": "test", + "MONIKER": "florence" }, "shell": { "scripts": { @@ -39,9 +37,11 @@ "make proto-gen" ], "gen:pkl": [ - "go run github.com/apple/pkl-go/cmd/pkl-gen-go ./pkl/oidc.pkl", - "go run github.com/apple/pkl-go/cmd/pkl-gen-go ./pkl/orm.pkl", - "go run github.com/apple/pkl-go/cmd/pkl-gen-go ./pkl/txns.pkl" + "go run github.com/apple/pkl-go/cmd/pkl-gen-go ./config/pkl/orm.pkl", + "go run github.com/apple/pkl-go/cmd/pkl-gen-go ./config/pkl/txns.pkl" + ], + "gen:templ": [ + "templ generate" ], "dev": [ "air" diff --git a/go.mod b/go.mod index 266cd90bf..a09260af8 100644 --- a/go.mod +++ b/go.mod @@ -73,10 +73,8 @@ require ( github.com/joho/godotenv v1.5.1 github.com/labstack/echo/v4 v4.10.2 github.com/mr-tron/base58 v1.2.0 - github.com/ncruces/go-sqlite3 v0.18.2 - github.com/ncruces/go-sqlite3/gormlite v0.18.0 github.com/nlepage/go-js-promise v1.0.0 - github.com/onsonr/crypto v1.29.0 + github.com/onsonr/crypto v1.30.0 github.com/segmentio/ksuid v1.0.4 github.com/spf13/cast v1.6.0 github.com/spf13/cobra v1.8.0 @@ -93,8 +91,6 @@ require ( google.golang.org/protobuf v1.34.2 gopkg.in/macaroon-bakery.v2 v2.3.0 gopkg.in/macaroon.v2 v2.1.0 - gorm.io/gorm v1.25.11 - lukechampine.com/adiantum v1.1.1 lukechampine.com/blake3 v1.3.0 ) @@ -236,8 +232,6 @@ require ( github.com/ipld/go-codec-dagpb v1.6.0 // indirect github.com/ipld/go-ipld-prime v0.21.0 // indirect github.com/jbenet/goprocess v0.1.4 // indirect - github.com/jinzhu/inflection v1.0.0 // indirect - github.com/jinzhu/now v1.1.5 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect github.com/klauspost/compress v1.17.9 // indirect @@ -286,7 +280,6 @@ require ( github.com/multiformats/go-multihash v0.2.3 // indirect github.com/multiformats/go-multistream v0.5.0 // indirect github.com/multiformats/go-varint v0.0.7 // indirect - github.com/ncruces/julianday v1.0.0 // indirect github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a // indirect github.com/oklog/run v1.1.0 // indirect github.com/onsi/ginkgo v1.16.5 // indirect @@ -318,7 +311,6 @@ require ( github.com/subosito/gotenv v1.6.0 // indirect github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect github.com/tendermint/go-amino v0.16.0 // indirect - github.com/tetratelabs/wazero v1.8.0 // indirect github.com/tidwall/btree v1.7.0 // indirect github.com/ulikunitz/xz v0.5.11 // indirect github.com/valyala/bytebufferpool v1.0.0 // indirect diff --git a/go.sum b/go.sum index e40ecf31a..1d2d642ef 100644 --- a/go.sum +++ b/go.sum @@ -1590,10 +1590,6 @@ github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jhump/protoreflect v1.15.3 h1:6SFRuqU45u9hIZPJAoZ8c28T3nK64BNdp9w6jFonzls= github.com/jhump/protoreflect v1.15.3/go.mod h1:4ORHmSBmlCW8fh3xHmJMGyul1zNqZK4Elxc8qKP+p1k= -github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= -github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= -github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= -github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= @@ -1830,12 +1826,6 @@ github.com/nats-io/nats.go v1.30.2/go.mod h1:dcfhUgmQNN4GJEfIb2f9R7Fow+gzBF4emzD github.com/nats-io/nkeys v0.4.4/go.mod h1:XUkxdLPTufzlihbamfzQ7mw/VGx6ObUs+0bN5sNvt64= github.com/nats-io/nkeys v0.4.5/go.mod h1:XUkxdLPTufzlihbamfzQ7mw/VGx6ObUs+0bN5sNvt64= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= -github.com/ncruces/go-sqlite3 v0.18.2 h1:m7QXhBWIwXsp84HE11t+ze0n1v3LRU+zGFg4uHjBeFA= -github.com/ncruces/go-sqlite3 v0.18.2/go.mod h1:4sZHOm+b/FM8FJRVGN4TemkPPDq5JXGK/1EHIEWxsYo= -github.com/ncruces/go-sqlite3/gormlite v0.18.0 h1:KqP9a9wlX/Ba+yG+aeVX4pnNBNdaSO6xHdNDWzPxPnk= -github.com/ncruces/go-sqlite3/gormlite v0.18.0/go.mod h1:RXeT1hknrz3A0tBDL6IfluDHuNkHdJeImn5TBMQg9zc= -github.com/ncruces/julianday v1.0.0 h1:fH0OKwa7NWvniGQtxdJRxAgkBMolni2BjDHaWTxqt7M= -github.com/ncruces/julianday v1.0.0/go.mod h1:Dusn2KvZrrovOMJuOt0TNXL6tB7U2E8kvza5fFc9G7g= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nlepage/go-js-promise v1.0.0 h1:K7OmJ3+0BgWJ2LfXchg2sI6RDr7AW/KWR8182epFwGQ= github.com/nlepage/go-js-promise v1.0.0/go.mod h1:bdOP0wObXu34euibyK39K1hoBCtlgTKXGc56AGflaRo= @@ -1861,8 +1851,8 @@ github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7J github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.33.1 h1:dsYjIxxSR755MDmKVsaFQTE22ChNBcuuTWgkUDSubOk= github.com/onsi/gomega v1.33.1/go.mod h1:U4R44UsT+9eLIaYRB2a5qajjtQYn0hauxvRm16AVYg0= -github.com/onsonr/crypto v1.29.0 h1:ontCN/XNNmpWv23N8VB6vsirLXcjxZaA67lLX9RNj0c= -github.com/onsonr/crypto v1.29.0/go.mod h1:NSfeCO6XoyQeSDEp6Jy42UGG5047GvzG6lW9lRnjrR0= +github.com/onsonr/crypto v1.30.0 h1:1zSKy/zZR0r1iT7d6bwy6/EiiWKNIb7ZhdoRp1tLirU= +github.com/onsonr/crypto v1.30.0/go.mod h1:NSfeCO6XoyQeSDEp6Jy42UGG5047GvzG6lW9lRnjrR0= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.0-rc5 h1:Ygwkfw9bpDvs+c9E34SdgGOj41dX/cbdlwvlWt0pnFI= @@ -2083,8 +2073,6 @@ github.com/syumai/workers v0.26.3 h1:AF+IBaRccbR4JIj2kNJLJblruPFMD/pAbzkopejGcP8 github.com/syumai/workers v0.26.3/go.mod h1:ZnqmdiHNBrbxOLrZ/HJ5jzHy6af9cmiNZk10R9NrIEA= github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E= github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= -github.com/tetratelabs/wazero v1.8.0 h1:iEKu0d4c2Pd+QSRieYbnQC9yiFlMS9D+Jr0LsRmcF4g= -github.com/tetratelabs/wazero v1.8.0/go.mod h1:yAI0XTsMBhREkM/YDAK/zNou3GoiAce1P6+rp/wQhjs= github.com/tidwall/btree v1.7.0 h1:L1fkJH/AuEh5zBnnBbmTwQ5Lt+bRJ5A8EWecslvo9iI= github.com/tidwall/btree v1.7.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= @@ -3074,8 +3062,6 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gorm.io/gorm v1.25.11 h1:/Wfyg1B/je1hnDx3sMkX+gAlxrlZpn6X0BXRlwXlvHg= -gorm.io/gorm v1.25.11/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ= gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU= gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -3086,8 +3072,6 @@ honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= -lukechampine.com/adiantum v1.1.1 h1:4fp6gTxWCqpEbLy40ExiYDDED3oUNWx5cTqBCtPdZqA= -lukechampine.com/adiantum v1.1.1/go.mod h1:LrAYVnTYLnUtE/yMp5bQr0HstAf060YUF8nM0B6+rUw= lukechampine.com/blake3 v1.3.0 h1:sJ3XhFINmHSrYCgl958hscfIa3bw8x4DqMP3u1YvoYE= lukechampine.com/blake3 v1.3.0/go.mod h1:0OFRp7fBtAylGVCO40o87sbupkyIGgbpv1+M1k1LM6k= lukechampine.com/uint128 v1.1.1/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= diff --git a/internal/db/actions.go b/internal/db/actions.go deleted file mode 100644 index cf0354acf..000000000 --- a/internal/db/actions.go +++ /dev/null @@ -1,330 +0,0 @@ -package db - -import ( - "fmt" - - "github.com/onsonr/sonr/internal/db/orm" - "gorm.io/gorm" -) - -// createInitialTables creates the initial tables in the database. -func createInitialTables(db *gorm.DB) (*DB, error) { - err := db.AutoMigrate( - &orm.Account{}, - &orm.Asset{}, - &orm.Credential{}, - &orm.Keyshare{}, - &orm.Permission{}, - &orm.Profile{}, - &orm.Property{}, - ) - if err != nil { - return nil, fmt.Errorf("failed to create table: %w", err) - } - - return &DB{db}, nil -} - -// AddAccount adds a new account to the database -func (db *DB) AddAccount(account *orm.Account) error { - tx := db.Create(account) - if tx.Error != nil { - return fmt.Errorf("failed to add account: %w", tx.Error) - } - - return nil -} - -// GetAccount gets an account from the database -func (db *DB) GetAccount(account *orm.Account) error { - tx := db.First(account) - if tx.Error != nil { - return fmt.Errorf("failed to get account: %w", tx.Error) - } - - return nil -} - -// UpdateAccount updates an existing account in the database -func (db *DB) UpdateAccount(account *orm.Account) error { - tx := db.Save(account) - if tx.Error != nil { - return fmt.Errorf("failed to update account: %w", tx.Error) - } - - return nil -} - -// DeleteAccount deletes an existing account from the database -func (db *DB) DeleteAccount(account *orm.Account) error { - tx := db.Delete(account) - if tx.Error != nil { - return fmt.Errorf("failed to delete account: %w", tx.Error) - } - - return nil -} - -// AddAsset adds a new asset to the database -func (db *DB) AddAsset(asset *orm.Asset) error { - tx := db.Create(asset) - - if tx.Error != nil { - return fmt.Errorf("failed to add asset: %w", tx.Error) - } - - return nil -} - -// GetAsset gets an asset from the database -func (db *DB) GetAsset(asset *orm.Asset) error { - tx := db.First(asset) - - if tx.Error != nil { - return fmt.Errorf("failed to get asset: %w", tx.Error) - } - - return nil -} - -// UpdateAsset updates an existing asset in the database -func (db *DB) UpdateAsset(asset *orm.Asset) error { - tx := db.Save(asset) - - if tx.Error != nil { - return fmt.Errorf("failed to update asset: %w", tx.Error) - } - - return nil -} - -// DeleteAsset deletes an existing asset from the database -func (db *DB) DeleteAsset(asset *orm.Asset) error { - tx := db.Delete(asset) - - if tx.Error != nil { - return fmt.Errorf("failed to delete asset: %w", tx.Error) - } - - return nil -} - -// AddCredential adds a new credential to the database -func (db *DB) AddCredential(credential *orm.Credential) error { - tx := db.Create(credential) - - if tx.Error != nil { - return fmt.Errorf("failed to add credential: %w", tx.Error) - } - - return nil -} - -// GetCredential gets an credential from the database -func (db *DB) GetCredential(credential *orm.Credential) error { - tx := db.First(credential) - - if tx.Error != nil { - return fmt.Errorf("failed to get credential: %w", tx.Error) - } - - return nil -} - -// UpdateCredential updates an existing credential in the database -func (db *DB) UpdateCredential(credential *orm.Credential) error { - tx := db.Save(credential) - - if tx.Error != nil { - return fmt.Errorf("failed to update credential: %w", tx.Error) - } - - return nil -} - -// DeleteCredential deletes an existing credential from the database -func (db *DB) DeleteCredential(credential *orm.Credential) error { - tx := db.Delete(credential) - - if tx.Error != nil { - return fmt.Errorf("failed to delete credential: %w", tx.Error) - } - - return nil -} - -// AddKeyshare adds a new keyshare to the database -func (db *DB) AddKeyshare(keyshare *orm.Keyshare) error { - tx := db.Create(keyshare) - - if tx.Error != nil { - return fmt.Errorf("failed to add keyshare: %w", tx.Error) - } - - return nil -} - -// GetKeyshare gets an keyshare from the database -func (db *DB) GetKeyshare(keyshare *orm.Keyshare) error { - tx := db.First(keyshare) - - if tx.Error != nil { - return fmt.Errorf("failed to get keyshare: %w", tx.Error) - } - - return nil -} - -// UpdateKeyshare updates an existing keyshare in the database -func (db *DB) UpdateKeyshare(keyshare *orm.Keyshare) error { - tx := db.Save(keyshare) - - if tx.Error != nil { - return fmt.Errorf("failed to update keyshare: %w", tx.Error) - } - - return nil -} - -// DeleteKeyshare deletes an existing keyshare from the database -func (db *DB) DeleteKeyshare(keyshare *orm.Keyshare) error { - tx := db.Delete(keyshare) - - if tx.Error != nil { - return fmt.Errorf("failed to delete keyshare: %w", tx.Error) - } - - return nil -} - -// AddPermission adds a new permission to the database -func (db *DB) AddPermission(permission *orm.Permission) error { - tx := db.Create(permission) - - if tx.Error != nil { - return fmt.Errorf("failed to add permission: %w", tx.Error) - } - - return nil -} - -// GetPermission gets an permission from the database -func (db *DB) GetPermission(permission *orm.Permission) error { - tx := db.First(permission) - - if tx.Error != nil { - return fmt.Errorf("failed to get permission: %w", tx.Error) - } - - return nil -} - -// UpdatePermission updates an existing permission in the database -func (db *DB) UpdatePermission(permission *orm.Permission) error { - tx := db.Save(permission) - - if tx.Error != nil { - return fmt.Errorf("failed to update permission: %w", tx.Error) - } - - return nil -} - -// DeletePermission deletes an existing permission from the database -func (db *DB) DeletePermission(permission *orm.Permission) error { - tx := db.Delete(permission) - - if tx.Error != nil { - return fmt.Errorf("failed to delete permission: %w", tx.Error) - } - - return nil -} - -// AddProfile adds a new profile to the database -func (db *DB) AddProfile(profile *orm.Profile) error { - tx := db.Create(profile) - - if tx.Error != nil { - return fmt.Errorf("failed to add profile: %w", tx.Error) - } - - return nil -} - -// GetProfile gets an profile from the database -func (db *DB) GetProfile(profile *orm.Profile) error { - tx := db.First(profile) - - if tx.Error != nil { - return fmt.Errorf("failed to get profile: %w", tx.Error) - } - - return nil -} - -// UpdateProfile updates an existing profile in the database -func (db *DB) UpdateProfile(profile *orm.Profile) error { - tx := db.Save(profile) - - if tx.Error != nil { - return fmt.Errorf("failed to update profile: %w", tx.Error) - } - - return nil -} - -// DeleteProfile deletes an existing profile from the database -func (db *DB) DeleteProfile(profile *orm.Profile) error { - tx := db.Delete(profile) - - if tx.Error != nil { - return fmt.Errorf("failed to delete profile: %w", tx.Error) - } - - return nil -} - -// AddProperty adds a new property to the database -func (db *DB) AddProperty(property *orm.Property) error { - tx := db.Create(property) - - if tx.Error != nil { - return fmt.Errorf("failed to add property: %w", tx.Error) - } - - return nil -} - -// GetProperty gets an property from the database -func (db *DB) GetProperty(property *orm.Property) error { - tx := db.First(property) - - if tx.Error != nil { - return fmt.Errorf("failed to get property: %w", tx.Error) - } - - return nil -} - -// UpdateProperty updates an existing property in the database -func (db *DB) UpdateProperty(property *orm.Property) error { - tx := db.Save(property) - - if tx.Error != nil { - return fmt.Errorf("failed to update property: %w", tx.Error) - } - - return nil -} - -// DeleteProperty deletes an existing property from the database -func (db *DB) DeleteProperty(property *orm.Property) error { - tx := db.Delete(property) - - if tx.Error != nil { - return fmt.Errorf("failed to delete property: %w", tx.Error) - } - - return nil -} diff --git a/internal/db/database.go b/internal/db/database.go deleted file mode 100644 index 12bb158ed..000000000 --- a/internal/db/database.go +++ /dev/null @@ -1,54 +0,0 @@ -package db - -import ( - "crypto/rand" - - "github.com/ncruces/go-sqlite3/gormlite" - "golang.org/x/crypto/argon2" - "gorm.io/gorm" - "lukechampine.com/adiantum/hbsh" - "lukechampine.com/adiantum/hpolyc" -) - -type DB struct { - *gorm.DB -} - -func New(opts ...DBOption) (*DB, error) { - config := &DBConfig{ - fileName: "vault.db", - } - for _, opt := range opts { - opt(config) - } - gormdb, err := gorm.Open(gormlite.Open(config.ConnectionString())) - if err != nil { - return nil, err - } - db, err := createInitialTables(gormdb) - if err != nil { - return nil, err - } - return db, nil -} - -// HBSH creates an HBSH cipher given a key. -func (c *DB) HBSH(key []byte) *hbsh.HBSH { - if len(key) != 32 { - // Key is not appropriate, return nil. - return nil - } - return hpolyc.New(key) -} - -// KDF gets a key from a secret. -func (c *DB) KDF(secret string) []byte { - if secret == "" { - // No secret is given, generate a random key. - key := make([]byte, 32) - n, _ := rand.Read(key) - return key[:n] - } - // Hash the secret with a KDF. - return argon2.IDKey([]byte(secret), []byte("hpolyc"), 3, 64*1024, 4, 32) -} diff --git a/internal/db/handlers.go b/internal/db/handlers.go deleted file mode 100644 index e4f739c77..000000000 --- a/internal/db/handlers.go +++ /dev/null @@ -1,195 +0,0 @@ -package db - -import ( - "github.com/labstack/echo/v4" - "github.com/onsonr/sonr/internal/db/orm" -) - -func (db *DB) ServeEcho(e *echo.Group) { - e.GET("/accounts", db.HandleAccount) - e.GET("/assets", db.HandleAsset) - e.GET("/credentials", db.HandleCredential) - e.GET("/keyshares", db.HandleKeyshare) - e.GET("/permissions", db.HandlePermission) - e.GET("/profiles", db.HandleProfile) - e.GET("/properties", db.HandleProperty) -} - -func (db *DB) HandleAccount(c echo.Context) error { - data := new(orm.Account) - if err := c.Bind(data); err != nil { - return err - } - // Check the method for GET, POST, PUT, DELETE - switch c.Request().Method { - case echo.POST: - - if err := db.AddAccount(data); err != nil { - return err - } - return c.JSON(200, "OK") - case echo.PUT: - - if err := db.UpdateAccount(data); err != nil { - return err - } - return c.JSON(200, "OK") - case echo.DELETE: - if err := db.DeleteAccount(data); err != nil { - return err - } - return c.JSON(200, nil) - } - return c.JSON(200, data) -} - -func (db *DB) HandleAsset(c echo.Context) error { - data := new(orm.Asset) - if err := c.Bind(data); err != nil { - return err - } - - switch c.Request().Method { - case echo.POST: - if err := db.AddAsset(data); err != nil { - return err - } - return c.JSON(200, "OK") - case echo.PUT: - if err := db.UpdateAsset(data); err != nil { - return err - } - return c.JSON(200, "OK") - case echo.DELETE: - if err := db.DeleteAsset(data); err != nil { - return err - } - return c.JSON(200, "OK") - } - return c.JSON(200, data) -} - -func (db *DB) HandleCredential(c echo.Context) error { - data := new(orm.Credential) - if err := c.Bind(data); err != nil { - return err - } - - switch c.Request().Method { - case echo.POST: - if err := db.AddCredential(data); err != nil { - return err - } - return c.JSON(200, "OK") - case echo.PUT: - if err := db.UpdateCredential(data); err != nil { - return err - } - return c.JSON(200, "OK") - case echo.DELETE: - if err := db.DeleteCredential(data); err != nil { - return err - } - } - return c.JSON(200, data) -} - -func (db *DB) HandleKeyshare(c echo.Context) error { - data := new(orm.Keyshare) - if err := c.Bind(data); err != nil { - return err - } - - switch c.Request().Method { - case echo.POST: - if err := db.AddKeyshare(data); err != nil { - return err - } - return c.JSON(200, "OK") - case echo.PUT: - if err := db.UpdateKeyshare(data); err != nil { - return err - } - return c.JSON(200, "OK") - case echo.DELETE: - if err := db.DeleteKeyshare(data); err != nil { - return err - } - } - return c.JSON(200, data) -} - -func (db *DB) HandlePermission(c echo.Context) error { - data := new(orm.Permission) - if err := c.Bind(data); err != nil { - return err - } - - switch c.Request().Method { - case echo.POST: - if err := db.AddPermission(data); err != nil { - return err - } - return c.JSON(200, "OK") - case echo.PUT: - if err := db.UpdatePermission(data); err != nil { - return err - } - return c.JSON(200, "OK") - case echo.DELETE: - if err := db.DeletePermission(data); err != nil { - return err - } - } - return c.JSON(200, data) -} - -func (db *DB) HandleProfile(c echo.Context) error { - data := new(orm.Profile) - if err := c.Bind(data); err != nil { - return err - } - - switch c.Request().Method { - case echo.POST: - if err := db.AddProfile(data); err != nil { - return err - } - return c.JSON(200, "OK") - case echo.PUT: - if err := db.UpdateProfile(data); err != nil { - return err - } - return c.JSON(200, "OK") - case echo.DELETE: - if err := db.DeleteProfile(data); err != nil { - return err - } - } - return c.JSON(200, data) -} - -func (db *DB) HandleProperty(c echo.Context) error { - data := new(orm.Property) - if err := c.Bind(data); err != nil { - return err - } - - switch c.Request().Method { - case echo.POST: - if err := db.AddProperty(data); err != nil { - return err - } - return c.JSON(200, "OK") - case echo.PUT: - if err := db.UpdateProperty(data); err != nil { - return err - } - return c.JSON(200, "OK") - case echo.DELETE: - if err := db.DeleteProperty(data); err != nil { - return err - } - } - return c.JSON(200, data) -} diff --git a/internal/db/options.go b/internal/db/options.go deleted file mode 100644 index 47f2e1f31..000000000 --- a/internal/db/options.go +++ /dev/null @@ -1,40 +0,0 @@ -package db - -import ( - _ "github.com/ncruces/go-sqlite3/embed" - "github.com/onsonr/sonr/internal/db/orm" -) - -type DBOption func(config *DBConfig) - -func WitDir(dir string) DBOption { - return func(config *DBConfig) { - config.Dir = dir - } -} - -func WithSecretKey(secretKey string) DBOption { - return func(config *DBConfig) { - config.SecretKey = secretKey - } -} - -type DBConfig struct { - Dir string - SecretKey string - - fileName string - initialAccounts []*orm.Account - initialAssets []*orm.Asset - initialCredentials []*orm.Credential - initialKeyshares []*orm.Keyshare - initialPermissions []*orm.Permission - initialProfiles []*orm.Profile - initialProperties []*orm.Property -} - -func (config *DBConfig) ConnectionString() string { - connStr := "file:" - connStr += config.fileName - return connStr -} diff --git a/internal/db/orm/Orm.pkl.go b/internal/db/orm/Orm.pkl.go deleted file mode 100644 index 8c2222fb0..000000000 --- a/internal/db/orm/Orm.pkl.go +++ /dev/null @@ -1,36 +0,0 @@ -// Code generated from Pkl module `orm`. DO NOT EDIT. -package orm - -import ( - "context" - - "github.com/apple/pkl-go/pkl" -) - -type Orm struct { -} - -// LoadFromPath loads the pkl module at the given path and evaluates it into a Orm -func LoadFromPath(ctx context.Context, path string) (ret *Orm, err error) { - evaluator, err := pkl.NewEvaluator(ctx, pkl.PreconfiguredOptions) - if err != nil { - return nil, err - } - defer func() { - cerr := evaluator.Close() - if err == nil { - err = cerr - } - }() - ret, err = Load(ctx, evaluator, pkl.FileSource(path)) - return ret, err -} - -// Load loads the pkl module at the given source and evaluates it with the given evaluator into a Orm -func Load(ctx context.Context, evaluator pkl.Evaluator, source *pkl.ModuleSource) (*Orm, error) { - var ret Orm - if err := evaluator.EvaluateModule(ctx, source, &ret); err != nil { - return nil, err - } - return &ret, nil -} diff --git a/internal/db/orm/init.pkl.go b/internal/db/orm/init.pkl.go deleted file mode 100644 index 817be2b7c..000000000 --- a/internal/db/orm/init.pkl.go +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated from Pkl module `orm`. DO NOT EDIT. -package orm - -import "github.com/apple/pkl-go/pkl" - -func init() { - pkl.RegisterMapping("orm", Orm{}) - pkl.RegisterMapping("orm#Account", Account{}) - pkl.RegisterMapping("orm#Asset", Asset{}) - pkl.RegisterMapping("orm#Chain", Chain{}) - pkl.RegisterMapping("orm#Credential", Credential{}) - pkl.RegisterMapping("orm#Profile", Profile{}) - pkl.RegisterMapping("orm#Property", Property{}) - pkl.RegisterMapping("orm#Keyshare", Keyshare{}) - pkl.RegisterMapping("orm#Permission", Permission{}) -} diff --git a/internal/dwn/dwn.go b/internal/dwn/dwn.go new file mode 100644 index 000000000..cc45a6e10 --- /dev/null +++ b/internal/dwn/dwn.go @@ -0,0 +1,47 @@ +//go:build js && wasm +// +build js,wasm + +package main + +import ( + "github.com/labstack/echo/v4" + "github.com/onsonr/sonr/internal/dwn/wasm" + + svc "github.com/onsonr/sonr/internal/dwn/handlers" + mdw "github.com/onsonr/sonr/internal/dwn/middleware" + "github.com/onsonr/sonr/internal/dwn/views" +) + +func main() { + e := New() + wasm.Serve(e) +} + +func registerFrontend(e *echo.Echo) { + // Add Public Pages + e.GET("/", views.HomeView) + e.GET("/login", views.LoginView) + e.POST("/login/:identifier", svc.HandleCredentialAssertion) + e.GET("/register", views.RegisterView) + e.POST("/register/:subject", svc.HandleCredentialCreation) + e.POST("/register/:subject/check", svc.CheckSubjectIsValid) + e.GET("/profile", views.ProfileView) +} + +func registerOpenID(g *echo.Group) { + // Add Authenticated Pages + g.Use(mdw.MacaroonMiddleware("test", "test")) + g.GET("/", views.AuthorizeView) + g.GET("/discovery", svc.GetDiscovery) + g.GET("/jwks", svc.GetJWKS) + g.GET("/token", svc.GetToken) + g.POST("/:origin/grant/:subject", svc.GrantAuthorization) +} + +func New() *echo.Echo { + e := echo.New() + e.Use(mdw.UseSession) + registerFrontend(e) + registerOpenID(e.Group("/authorize")) + return e +} diff --git a/internal/gui/elements/alert.templ b/internal/dwn/elements/alert.templ similarity index 100% rename from internal/gui/elements/alert.templ rename to internal/dwn/elements/alert.templ diff --git a/internal/gui/elements/alert_templ.go b/internal/dwn/elements/alert_templ.go similarity index 98% rename from internal/gui/elements/alert_templ.go rename to internal/dwn/elements/alert_templ.go index 9e21f5df5..92de98b39 100644 --- a/internal/gui/elements/alert_templ.go +++ b/internal/dwn/elements/alert_templ.go @@ -53,7 +53,7 @@ func alertElement(attrs templ.Attributes, title, message string, icon templ.Comp var templ_7745c5c3_Var2 string templ_7745c5c3_Var2, templ_7745c5c3_Err = templ.JoinStringErrs(title) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/gui/elements/alert.templ`, Line: 10, Col: 66} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/dwn/elements/alert.templ`, Line: 10, Col: 66} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var2)) if templ_7745c5c3_Err != nil { @@ -66,7 +66,7 @@ func alertElement(attrs templ.Attributes, title, message string, icon templ.Comp var templ_7745c5c3_Var3 string templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(message) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/gui/elements/alert.templ`, Line: 11, Col: 43} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/dwn/elements/alert.templ`, Line: 11, Col: 43} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3)) if templ_7745c5c3_Err != nil { diff --git a/internal/gui/elements/animation.templ b/internal/dwn/elements/animation.templ similarity index 100% rename from internal/gui/elements/animation.templ rename to internal/dwn/elements/animation.templ diff --git a/internal/gui/elements/animation_templ.go b/internal/dwn/elements/animation_templ.go similarity index 100% rename from internal/gui/elements/animation_templ.go rename to internal/dwn/elements/animation_templ.go diff --git a/internal/gui/elements/badge.templ b/internal/dwn/elements/badge.templ similarity index 100% rename from internal/gui/elements/badge.templ rename to internal/dwn/elements/badge.templ diff --git a/internal/gui/elements/badge_templ.go b/internal/dwn/elements/badge_templ.go similarity index 100% rename from internal/gui/elements/badge_templ.go rename to internal/dwn/elements/badge_templ.go diff --git a/internal/gui/elements/breadcrumbs.templ b/internal/dwn/elements/breadcrumbs.templ similarity index 100% rename from internal/gui/elements/breadcrumbs.templ rename to internal/dwn/elements/breadcrumbs.templ diff --git a/internal/gui/elements/breadcrumbs_templ.go b/internal/dwn/elements/breadcrumbs_templ.go similarity index 98% rename from internal/gui/elements/breadcrumbs_templ.go rename to internal/dwn/elements/breadcrumbs_templ.go index fd10e29ed..7daa027c2 100644 --- a/internal/gui/elements/breadcrumbs_templ.go +++ b/internal/dwn/elements/breadcrumbs_templ.go @@ -92,7 +92,7 @@ func breadcrumbItem(title string, active bool) templ.Component { var templ_7745c5c3_Var3 string templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(title) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/gui/elements/breadcrumbs.templ`, Line: 23, Col: 126} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/dwn/elements/breadcrumbs.templ`, Line: 23, Col: 126} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3)) if templ_7745c5c3_Err != nil { @@ -110,7 +110,7 @@ func breadcrumbItem(title string, active bool) templ.Component { var templ_7745c5c3_Var4 string templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinStringErrs(title) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/gui/elements/breadcrumbs.templ`, Line: 25, Col: 118} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/dwn/elements/breadcrumbs.templ`, Line: 25, Col: 118} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var4)) if templ_7745c5c3_Err != nil { diff --git a/internal/gui/elements/button.templ b/internal/dwn/elements/button.templ similarity index 100% rename from internal/gui/elements/button.templ rename to internal/dwn/elements/button.templ diff --git a/internal/gui/elements/button_templ.go b/internal/dwn/elements/button_templ.go similarity index 97% rename from internal/gui/elements/button_templ.go rename to internal/dwn/elements/button_templ.go index 95f6f7533..3fddae965 100644 --- a/internal/gui/elements/button_templ.go +++ b/internal/dwn/elements/button_templ.go @@ -151,7 +151,7 @@ func renderHxGetButton(c *button, attrs templ.Attributes) templ.Component { var templ_7745c5c3_Var3 string templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(c.hxGet) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/gui/elements/button.templ`, Line: 86, Col: 25} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/dwn/elements/button.templ`, Line: 86, Col: 25} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3)) if templ_7745c5c3_Err != nil { @@ -164,7 +164,7 @@ func renderHxGetButton(c *button, attrs templ.Attributes) templ.Component { var templ_7745c5c3_Var4 string templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinStringErrs(c.hxTarget) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/gui/elements/button.templ`, Line: 86, Col: 69} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/dwn/elements/button.templ`, Line: 86, Col: 69} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var4)) if templ_7745c5c3_Err != nil { @@ -177,7 +177,7 @@ func renderHxGetButton(c *button, attrs templ.Attributes) templ.Component { var templ_7745c5c3_Var5 string templ_7745c5c3_Var5, templ_7745c5c3_Err = templ.JoinStringErrs(c.hxTrigger) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/gui/elements/button.templ`, Line: 86, Col: 96} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/dwn/elements/button.templ`, Line: 86, Col: 96} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var5)) if templ_7745c5c3_Err != nil { @@ -190,7 +190,7 @@ func renderHxGetButton(c *button, attrs templ.Attributes) templ.Component { var templ_7745c5c3_Var6 string templ_7745c5c3_Var6, templ_7745c5c3_Err = templ.JoinStringErrs(c.hxSwap) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/gui/elements/button.templ`, Line: 86, Col: 117} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/dwn/elements/button.templ`, Line: 86, Col: 117} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var6)) if templ_7745c5c3_Err != nil { @@ -245,7 +245,7 @@ func renderHxPostButton(c *button, attrs templ.Attributes) templ.Component { var templ_7745c5c3_Var8 string templ_7745c5c3_Var8, templ_7745c5c3_Err = templ.JoinStringErrs(c.hxPost) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/gui/elements/button.templ`, Line: 92, Col: 27} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/dwn/elements/button.templ`, Line: 92, Col: 27} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var8)) if templ_7745c5c3_Err != nil { @@ -258,7 +258,7 @@ func renderHxPostButton(c *button, attrs templ.Attributes) templ.Component { var templ_7745c5c3_Var9 string templ_7745c5c3_Var9, templ_7745c5c3_Err = templ.JoinStringErrs(c.hxTarget) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/gui/elements/button.templ`, Line: 92, Col: 52} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/dwn/elements/button.templ`, Line: 92, Col: 52} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var9)) if templ_7745c5c3_Err != nil { @@ -271,7 +271,7 @@ func renderHxPostButton(c *button, attrs templ.Attributes) templ.Component { var templ_7745c5c3_Var10 string templ_7745c5c3_Var10, templ_7745c5c3_Err = templ.JoinStringErrs(c.hxTrigger) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/gui/elements/button.templ`, Line: 92, Col: 79} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/dwn/elements/button.templ`, Line: 92, Col: 79} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var10)) if templ_7745c5c3_Err != nil { @@ -284,7 +284,7 @@ func renderHxPostButton(c *button, attrs templ.Attributes) templ.Component { var templ_7745c5c3_Var11 string templ_7745c5c3_Var11, templ_7745c5c3_Err = templ.JoinStringErrs(c.hxSwap) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/gui/elements/button.templ`, Line: 92, Col: 100} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/dwn/elements/button.templ`, Line: 92, Col: 100} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var11)) if templ_7745c5c3_Err != nil { diff --git a/internal/gui/elements/card.templ b/internal/dwn/elements/card.templ similarity index 100% rename from internal/gui/elements/card.templ rename to internal/dwn/elements/card.templ diff --git a/internal/gui/elements/card_templ.go b/internal/dwn/elements/card_templ.go similarity index 99% rename from internal/gui/elements/card_templ.go rename to internal/dwn/elements/card_templ.go index 9636e8d1f..37cc1be00 100644 --- a/internal/gui/elements/card_templ.go +++ b/internal/dwn/elements/card_templ.go @@ -37,7 +37,7 @@ func renderCard(id string, attrs templ.Attributes) templ.Component { var templ_7745c5c3_Var2 string templ_7745c5c3_Var2, templ_7745c5c3_Err = templ.JoinStringErrs(id) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/gui/elements/card.templ`, Line: 8, Col: 13} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/dwn/elements/card.templ`, Line: 8, Col: 13} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var2)) if templ_7745c5c3_Err != nil { diff --git a/internal/gui/elements/elements.go b/internal/dwn/elements/elements.go similarity index 100% rename from internal/gui/elements/elements.go rename to internal/dwn/elements/elements.go diff --git a/internal/gui/elements/fonts.templ b/internal/dwn/elements/fonts.templ similarity index 85% rename from internal/gui/elements/fonts.templ rename to internal/dwn/elements/fonts.templ index f05d49f83..0783a4502 100644 --- a/internal/gui/elements/fonts.templ +++ b/internal/dwn/elements/fonts.templ @@ -19,15 +19,15 @@ func Text(content string) templ.Component { templ renderText(level int, text string) { switch level { case 1: -

+

{ text }

case 2: -

+

{ text }

case 3: -

+

{ text }

default: diff --git a/internal/gui/elements/fonts_templ.go b/internal/dwn/elements/fonts_templ.go similarity index 95% rename from internal/gui/elements/fonts_templ.go rename to internal/dwn/elements/fonts_templ.go index c881cd20a..eac3eb958 100644 --- a/internal/gui/elements/fonts_templ.go +++ b/internal/dwn/elements/fonts_templ.go @@ -44,14 +44,14 @@ func renderText(level int, text string) templ.Component { ctx = templ.ClearChildren(ctx) switch level { case 1: - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("

") + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("

") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } var templ_7745c5c3_Var2 string templ_7745c5c3_Var2, templ_7745c5c3_Err = templ.JoinStringErrs(text) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/gui/elements/fonts.templ`, Line: 23, Col: 10} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/dwn/elements/fonts.templ`, Line: 23, Col: 10} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var2)) if templ_7745c5c3_Err != nil { @@ -62,14 +62,14 @@ func renderText(level int, text string) templ.Component { return templ_7745c5c3_Err } case 2: - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("

") + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("

") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } var templ_7745c5c3_Var3 string templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(text) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/gui/elements/fonts.templ`, Line: 27, Col: 10} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/dwn/elements/fonts.templ`, Line: 27, Col: 10} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3)) if templ_7745c5c3_Err != nil { @@ -80,14 +80,14 @@ func renderText(level int, text string) templ.Component { return templ_7745c5c3_Err } case 3: - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("

") + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("

") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } var templ_7745c5c3_Var4 string templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinStringErrs(text) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/gui/elements/fonts.templ`, Line: 31, Col: 10} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/dwn/elements/fonts.templ`, Line: 31, Col: 10} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var4)) if templ_7745c5c3_Err != nil { @@ -105,7 +105,7 @@ func renderText(level int, text string) templ.Component { var templ_7745c5c3_Var5 string templ_7745c5c3_Var5, templ_7745c5c3_Err = templ.JoinStringErrs(text) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/gui/elements/fonts.templ`, Line: 35, Col: 10} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/dwn/elements/fonts.templ`, Line: 35, Col: 10} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var5)) if templ_7745c5c3_Err != nil { @@ -153,7 +153,7 @@ func renderLink(attrs templ.Attributes, text string) templ.Component { var templ_7745c5c3_Var7 string templ_7745c5c3_Var7, templ_7745c5c3_Err = templ.JoinStringErrs(text) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/gui/elements/fonts.templ`, Line: 42, Col: 8} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/dwn/elements/fonts.templ`, Line: 42, Col: 8} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var7)) if templ_7745c5c3_Err != nil { @@ -200,7 +200,7 @@ func renderStrong(attrs templ.Attributes, text string) templ.Component { var templ_7745c5c3_Var9 string templ_7745c5c3_Var9, templ_7745c5c3_Err = templ.JoinStringErrs(text) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/gui/elements/fonts.templ`, Line: 48, Col: 8} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/dwn/elements/fonts.templ`, Line: 48, Col: 8} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var9)) if templ_7745c5c3_Err != nil { @@ -247,7 +247,7 @@ func renderEmphasis(attrs templ.Attributes, text string) templ.Component { var templ_7745c5c3_Var11 string templ_7745c5c3_Var11, templ_7745c5c3_Err = templ.JoinStringErrs(text) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/gui/elements/fonts.templ`, Line: 54, Col: 8} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/dwn/elements/fonts.templ`, Line: 54, Col: 8} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var11)) if templ_7745c5c3_Err != nil { @@ -294,7 +294,7 @@ func renderCode(attrs templ.Attributes, text string) templ.Component { var templ_7745c5c3_Var13 string templ_7745c5c3_Var13, templ_7745c5c3_Err = templ.JoinStringErrs(text) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/gui/elements/fonts.templ`, Line: 60, Col: 8} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/dwn/elements/fonts.templ`, Line: 60, Col: 8} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var13)) if templ_7745c5c3_Err != nil { diff --git a/internal/gui/elements/global.templ b/internal/dwn/elements/global.templ similarity index 100% rename from internal/gui/elements/global.templ rename to internal/dwn/elements/global.templ diff --git a/internal/gui/elements/global_templ.go b/internal/dwn/elements/global_templ.go similarity index 99% rename from internal/gui/elements/global_templ.go rename to internal/dwn/elements/global_templ.go index 46606b039..d241bec57 100644 --- a/internal/gui/elements/global_templ.go +++ b/internal/dwn/elements/global_templ.go @@ -41,7 +41,7 @@ func Layout(title string) templ.Component { var templ_7745c5c3_Var2 string templ_7745c5c3_Var2, templ_7745c5c3_Err = templ.JoinStringErrs(title) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/gui/elements/global.templ`, Line: 8, Col: 17} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/dwn/elements/global.templ`, Line: 8, Col: 17} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var2)) if templ_7745c5c3_Err != nil { diff --git a/internal/gui/elements/icons.templ b/internal/dwn/elements/icons.templ similarity index 100% rename from internal/gui/elements/icons.templ rename to internal/dwn/elements/icons.templ diff --git a/internal/gui/elements/icons_templ.go b/internal/dwn/elements/icons_templ.go similarity index 100% rename from internal/gui/elements/icons_templ.go rename to internal/dwn/elements/icons_templ.go diff --git a/internal/gui/elements/inputs.templ b/internal/dwn/elements/inputs.templ similarity index 100% rename from internal/gui/elements/inputs.templ rename to internal/dwn/elements/inputs.templ diff --git a/internal/gui/elements/inputs_templ.go b/internal/dwn/elements/inputs_templ.go similarity index 96% rename from internal/gui/elements/inputs_templ.go rename to internal/dwn/elements/inputs_templ.go index 31088115b..f69251c0b 100644 --- a/internal/gui/elements/inputs_templ.go +++ b/internal/dwn/elements/inputs_templ.go @@ -43,7 +43,7 @@ func TextInput(state InputState, label string, placeholder string) templ.Compone var templ_7745c5c3_Var2 string templ_7745c5c3_Var2, templ_7745c5c3_Err = templ.JoinStringErrs(label) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/gui/elements/inputs.templ`, Line: 15, Col: 128} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/dwn/elements/inputs.templ`, Line: 15, Col: 128} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var2)) if templ_7745c5c3_Err != nil { @@ -61,7 +61,7 @@ func TextInput(state InputState, label string, placeholder string) templ.Compone var templ_7745c5c3_Var3 string templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(label) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/gui/elements/inputs.templ`, Line: 20, Col: 128} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/dwn/elements/inputs.templ`, Line: 20, Col: 128} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3)) if templ_7745c5c3_Err != nil { @@ -79,7 +79,7 @@ func TextInput(state InputState, label string, placeholder string) templ.Compone var templ_7745c5c3_Var4 string templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinStringErrs(label) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/gui/elements/inputs.templ`, Line: 25, Col: 128} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/dwn/elements/inputs.templ`, Line: 25, Col: 128} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var4)) if templ_7745c5c3_Err != nil { diff --git a/internal/dwn/elements/panel.templ b/internal/dwn/elements/panel.templ new file mode 100644 index 000000000..37e085236 --- /dev/null +++ b/internal/dwn/elements/panel.templ @@ -0,0 +1,6 @@ +package elements + +import "github.com/labstack/echo/v4" + +templ Panel(c echo.Context, id string) { +} diff --git a/internal/dwn/elements/panel_templ.go b/internal/dwn/elements/panel_templ.go new file mode 100644 index 000000000..04e02f0a5 --- /dev/null +++ b/internal/dwn/elements/panel_templ.go @@ -0,0 +1,35 @@ +// Code generated by templ - DO NOT EDIT. + +// templ: version: v0.2.771 +package elements + +//lint:file-ignore SA4006 This context is only used if a nested component is present. + +import "github.com/a-h/templ" +import templruntime "github.com/a-h/templ/runtime" + +import "github.com/labstack/echo/v4" + +func Panel(c echo.Context, id string) templ.Component { + return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context + templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) + if !templ_7745c5c3_IsBuffer { + defer func() { + templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) + if templ_7745c5c3_Err == nil { + templ_7745c5c3_Err = templ_7745c5c3_BufErr + } + }() + } + ctx = templ.InitializeContext(ctx) + templ_7745c5c3_Var1 := templ.GetChildren(ctx) + if templ_7745c5c3_Var1 == nil { + templ_7745c5c3_Var1 = templ.NopComponent + } + ctx = templ.ClearChildren(ctx) + return templ_7745c5c3_Err + }) +} + +var _ = templruntime.GeneratedTemplate diff --git a/internal/gui/elements/radios.templ b/internal/dwn/elements/radios.templ similarity index 100% rename from internal/gui/elements/radios.templ rename to internal/dwn/elements/radios.templ diff --git a/internal/gui/elements/radios_templ.go b/internal/dwn/elements/radios_templ.go similarity index 100% rename from internal/gui/elements/radios_templ.go rename to internal/dwn/elements/radios_templ.go diff --git a/internal/gui/elements/sizes.templ b/internal/dwn/elements/sizes.templ similarity index 100% rename from internal/gui/elements/sizes.templ rename to internal/dwn/elements/sizes.templ diff --git a/internal/gui/elements/sizes_templ.go b/internal/dwn/elements/sizes_templ.go similarity index 100% rename from internal/gui/elements/sizes_templ.go rename to internal/dwn/elements/sizes_templ.go diff --git a/internal/gui/elements/tabs.templ b/internal/dwn/elements/tabs.templ similarity index 100% rename from internal/gui/elements/tabs.templ rename to internal/dwn/elements/tabs.templ diff --git a/internal/gui/elements/tabs_templ.go b/internal/dwn/elements/tabs_templ.go similarity index 100% rename from internal/gui/elements/tabs_templ.go rename to internal/dwn/elements/tabs_templ.go diff --git a/internal/svc/openid.go b/internal/dwn/handlers/openid.go similarity index 96% rename from internal/svc/openid.go rename to internal/dwn/handlers/openid.go index 78b97119f..179adc253 100644 --- a/internal/svc/openid.go +++ b/internal/dwn/handlers/openid.go @@ -4,7 +4,7 @@ import ( "fmt" "github.com/labstack/echo/v4" - oidc "github.com/onsonr/sonr/x/did/types/oidc" + oidc "github.com/onsonr/sonr/internal/dwn/models" ) func GrantAuthorization(e echo.Context) error { diff --git a/internal/svc/webauth.go b/internal/dwn/handlers/webauth.go similarity index 100% rename from internal/svc/webauth.go rename to internal/dwn/handlers/webauth.go diff --git a/internal/gui/forms/forms.go b/internal/dwn/islands/forms.go similarity index 98% rename from internal/gui/forms/forms.go rename to internal/dwn/islands/forms.go index 0b7e1ad5f..5c75ae942 100644 --- a/internal/gui/forms/forms.go +++ b/internal/dwn/islands/forms.go @@ -1,4 +1,4 @@ -package forms +package islands import ( "bytes" diff --git a/internal/gui/forms/register.templ b/internal/dwn/islands/register.templ similarity index 92% rename from internal/gui/forms/register.templ rename to internal/dwn/islands/register.templ index 76b0c1d99..953ea0dc3 100644 --- a/internal/gui/forms/register.templ +++ b/internal/dwn/islands/register.templ @@ -1,4 +1,4 @@ -package forms +package islands import "github.com/labstack/echo/v4" @@ -18,8 +18,8 @@ templ BasicInfo(c echo.Context, state FormState) { } } -templ CreateCredentials(state FormState) { +templ CreateCredentials(c echo.Context, state FormState) { } -templ PrivacyTerms(state FormState) { +templ PrivacyTerms(c echo.Context, state FormState) { } diff --git a/internal/gui/forms/register_templ.go b/internal/dwn/islands/register_templ.go similarity index 96% rename from internal/gui/forms/register_templ.go rename to internal/dwn/islands/register_templ.go index 99dbc9976..b49a513a7 100644 --- a/internal/gui/forms/register_templ.go +++ b/internal/dwn/islands/register_templ.go @@ -1,7 +1,7 @@ // Code generated by templ - DO NOT EDIT. // templ: version: v0.2.771 -package forms +package islands //lint:file-ignore SA4006 This context is only used if a nested component is present. @@ -39,7 +39,7 @@ func BasicInfo(c echo.Context, state FormState) templ.Component { }) } -func CreateCredentials(state FormState) templ.Component { +func CreateCredentials(c echo.Context, state FormState) templ.Component { return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) @@ -61,7 +61,7 @@ func CreateCredentials(state FormState) templ.Component { }) } -func PrivacyTerms(state FormState) templ.Component { +func PrivacyTerms(c echo.Context, state FormState) templ.Component { return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) diff --git a/internal/mdw/authz.go b/internal/dwn/middleware/authz.go similarity index 100% rename from internal/mdw/authz.go rename to internal/dwn/middleware/authz.go diff --git a/internal/dwn/middleware/browser.go b/internal/dwn/middleware/browser.go new file mode 100644 index 000000000..a75f50c30 --- /dev/null +++ b/internal/dwn/middleware/browser.go @@ -0,0 +1,28 @@ +//go:build js && wasm +// +build js,wasm + +package mdw + +import ( + "github.com/donseba/go-htmx" + "github.com/labstack/echo/v4" +) + +type Browser struct { + echo.Context + isMobile bool + userAgent string + width int + olc string + ksuid string + + // HTMX Specific + htmx *htmx.HTMX + + // WebAPIs + credentials CredentialsAPI + indexedDB IndexedDBAPI + localStorage LocalStorageAPI + push PushAPI + sessionStorage SessionStorageAPI +} diff --git a/internal/mdw/client.go b/internal/dwn/middleware/client.go similarity index 100% rename from internal/mdw/client.go rename to internal/dwn/middleware/client.go diff --git a/internal/dwn/middleware/credentials.go b/internal/dwn/middleware/credentials.go new file mode 100644 index 000000000..8ca21a48a --- /dev/null +++ b/internal/dwn/middleware/credentials.go @@ -0,0 +1,6 @@ +//go:build js && wasm +// +build js,wasm + +package mdw + +type CredentialsAPI interface{} diff --git a/internal/db/idb/idb.go b/internal/dwn/middleware/database.go similarity index 67% rename from internal/db/idb/idb.go rename to internal/dwn/middleware/database.go index 5dab6c074..388274d93 100644 --- a/internal/db/idb/idb.go +++ b/internal/dwn/middleware/database.go @@ -1,7 +1,7 @@ //go:build js && wasm // +build js,wasm -package idb +package mdw import ( "context" @@ -12,6 +12,8 @@ import ( "github.com/hack-pad/go-indexeddb/idb" ) +type IndexedDBAPI interface{} + // Model is an interface that must be implemented by types used with Table type Model interface { Table() string @@ -27,12 +29,11 @@ type Table[T Model] struct { // NewTable creates a new Table instance func NewTable[T Model](dbName string, version uint, keyPath string) (*Table[T], error) { ctx := context.Background() - factory := idb.Global() var model T tableName := model.Table() - openRequest, err := factory.Open(ctx, dbName, version, func(db *idb.Database, oldVersion, newVersion uint) error { + openRequest, err := idb.Global().Open(ctx, dbName, version, func(db *idb.Database, oldVersion, newVersion uint) error { _, err := db.CreateObjectStore(tableName, idb.ObjectStoreOptions{ KeyPath: js.ValueOf(keyPath), }) @@ -107,6 +108,36 @@ func (t *Table[T]) Query(key interface{}) (T, error) { return result, err } +// First retrieves the first record from the table +func (t *Table[T]) First(data T) error { + tx, err := t.db.Transaction(idb.TransactionReadOnly, data.Table()) + if err != nil { + return err + } + defer tx.Commit() + + objectStore, err := tx.ObjectStore(data.Table()) + if err != nil { + return err + } + + request, err := objectStore.Get(js.ValueOf(t.keyPath)) + if err != nil { + return err + } + value, err := request.Await(context.Background()) + if err != nil { + return err + } + + if value.IsUndefined() || value.IsNull() { + return errors.New("record not found") + } + + err = json.Unmarshal([]byte(value.String()), &data) + return err +} + // Delete removes a record from the table based on a key func (t *Table[T]) Delete(key interface{}) error { var model T @@ -125,6 +156,28 @@ func (t *Table[T]) Delete(key interface{}) error { return err } +// Save updates a record in the table based on a key +func (t *Table[T]) Save(data T) error { + tx, err := t.db.Transaction(idb.TransactionReadWrite, data.Table()) + if err != nil { + return err + } + defer tx.Commit() + + objectStore, err := tx.ObjectStore(data.Table()) + if err != nil { + return err + } + + jsonData, err := json.Marshal(data) + if err != nil { + return err + } + + _, err = objectStore.Put(js.ValueOf(string(jsonData))) + return err +} + // Close closes the database connection func (t *Table[T]) Close() error { return t.db.Close() diff --git a/internal/mdw/headers.go b/internal/dwn/middleware/headers.go similarity index 100% rename from internal/mdw/headers.go rename to internal/dwn/middleware/headers.go diff --git a/internal/dwn/middleware/notifier.go b/internal/dwn/middleware/notifier.go new file mode 100644 index 000000000..dd543664a --- /dev/null +++ b/internal/dwn/middleware/notifier.go @@ -0,0 +1,6 @@ +//go:build js && wasm +// +build js,wasm + +package mdw + +type PushAPI interface{} diff --git a/internal/mdw/session.go b/internal/dwn/middleware/session.go similarity index 92% rename from internal/mdw/session.go rename to internal/dwn/middleware/session.go index 8907bc1e2..3d0e1a98f 100644 --- a/internal/mdw/session.go +++ b/internal/dwn/middleware/session.go @@ -6,14 +6,12 @@ import ( "github.com/donseba/go-htmx" "github.com/labstack/echo/v4" - "github.com/onsonr/sonr/internal/db" "github.com/segmentio/ksuid" ) type Session struct { echo.Context htmx *htmx.HTMX - dB *db.DB } // GetSession returns the current Session @@ -31,10 +29,6 @@ func UseSession(next echo.HandlerFunc) echo.HandlerFunc { } } -func (c *Session) DB() *db.DB { - return c.dB -} - func (c *Session) Htmx() *htmx.HTMX { return c.htmx } diff --git a/internal/dwn/middleware/storage.go b/internal/dwn/middleware/storage.go new file mode 100644 index 000000000..352bc927e --- /dev/null +++ b/internal/dwn/middleware/storage.go @@ -0,0 +1,8 @@ +//go:build js && wasm +// +build js,wasm + +package mdw + +type LocalStorageAPI interface{} + +type SessionStorageAPI interface{} diff --git a/internal/db/orm/Account.pkl.go b/internal/dwn/models/Account.pkl.go similarity index 85% rename from internal/db/orm/Account.pkl.go rename to internal/dwn/models/Account.pkl.go index 09a4e0b1a..a2acf13b8 100644 --- a/internal/db/orm/Account.pkl.go +++ b/internal/dwn/models/Account.pkl.go @@ -1,5 +1,5 @@ -// Code generated from Pkl module `orm`. DO NOT EDIT. -package orm +// Code generated from Pkl module `models`. DO NOT EDIT. +package models type Account struct { Id uint `pkl:"id" gorm:"primaryKey,autoIncrement" json:"id,omitempty" query:"id"` diff --git a/internal/db/orm/Asset.pkl.go b/internal/dwn/models/Asset.pkl.go similarity index 86% rename from internal/db/orm/Asset.pkl.go rename to internal/dwn/models/Asset.pkl.go index fd28cc9f7..0957a96d9 100644 --- a/internal/db/orm/Asset.pkl.go +++ b/internal/dwn/models/Asset.pkl.go @@ -1,5 +1,5 @@ -// Code generated from Pkl module `orm`. DO NOT EDIT. -package orm +// Code generated from Pkl module `models`. DO NOT EDIT. +package models type Asset struct { Id uint `pkl:"id" gorm:"primaryKey,autoIncrement" json:"id,omitempty" query:"id"` diff --git a/internal/db/orm/Chain.pkl.go b/internal/dwn/models/Chain.pkl.go similarity index 82% rename from internal/db/orm/Chain.pkl.go rename to internal/dwn/models/Chain.pkl.go index 6b3544d18..232208f06 100644 --- a/internal/db/orm/Chain.pkl.go +++ b/internal/dwn/models/Chain.pkl.go @@ -1,5 +1,5 @@ -// Code generated from Pkl module `orm`. DO NOT EDIT. -package orm +// Code generated from Pkl module `models`. DO NOT EDIT. +package models type Chain struct { Id uint `pkl:"id" gorm:"primaryKey,autoIncrement" json:"id,omitempty" query:"id"` diff --git a/internal/db/orm/Credential.pkl.go b/internal/dwn/models/Credential.pkl.go similarity index 95% rename from internal/db/orm/Credential.pkl.go rename to internal/dwn/models/Credential.pkl.go index b05f04c9b..34cac239e 100644 --- a/internal/db/orm/Credential.pkl.go +++ b/internal/dwn/models/Credential.pkl.go @@ -1,5 +1,5 @@ -// Code generated from Pkl module `orm`. DO NOT EDIT. -package orm +// Code generated from Pkl module `models`. DO NOT EDIT. +package models type Credential struct { Id uint `pkl:"id" gorm:"primaryKey,autoIncrement" json:"id,omitempty" query:"id"` diff --git a/x/did/types/oidc/DiscoveryDocument.pkl.go b/internal/dwn/models/DiscoveryDocument.pkl.go similarity index 96% rename from x/did/types/oidc/DiscoveryDocument.pkl.go rename to internal/dwn/models/DiscoveryDocument.pkl.go index d25cce456..25131065f 100644 --- a/x/did/types/oidc/DiscoveryDocument.pkl.go +++ b/internal/dwn/models/DiscoveryDocument.pkl.go @@ -1,5 +1,5 @@ -// Code generated from Pkl module `oidc`. DO NOT EDIT. -package oidc +// Code generated from Pkl module `models`. DO NOT EDIT. +package models type DiscoveryDocument struct { Issuer string `pkl:"issuer" json:"issuer,omitempty" param:"issuer"` diff --git a/internal/db/orm/Keyshare.pkl.go b/internal/dwn/models/Keyshare.pkl.go similarity index 81% rename from internal/db/orm/Keyshare.pkl.go rename to internal/dwn/models/Keyshare.pkl.go index ed51e7a94..256752a7d 100644 --- a/internal/db/orm/Keyshare.pkl.go +++ b/internal/dwn/models/Keyshare.pkl.go @@ -1,5 +1,5 @@ -// Code generated from Pkl module `orm`. DO NOT EDIT. -package orm +// Code generated from Pkl module `models`. DO NOT EDIT. +package models type Keyshare struct { Id uint `pkl:"id" gorm:"primaryKey,autoIncrement" json:"id,omitempty" query:"id"` diff --git a/x/did/types/oidc/Oidc.pkl.go b/internal/dwn/models/Models.pkl.go similarity index 68% rename from x/did/types/oidc/Oidc.pkl.go rename to internal/dwn/models/Models.pkl.go index 3a4e4a67a..a3e880304 100644 --- a/x/did/types/oidc/Oidc.pkl.go +++ b/internal/dwn/models/Models.pkl.go @@ -1,5 +1,5 @@ -// Code generated from Pkl module `oidc`. DO NOT EDIT. -package oidc +// Code generated from Pkl module `models`. DO NOT EDIT. +package models import ( "context" @@ -7,11 +7,11 @@ import ( "github.com/apple/pkl-go/pkl" ) -type Oidc struct { +type Models struct { } -// LoadFromPath loads the pkl module at the given path and evaluates it into a Oidc -func LoadFromPath(ctx context.Context, path string) (ret *Oidc, err error) { +// LoadFromPath loads the pkl module at the given path and evaluates it into a Models +func LoadFromPath(ctx context.Context, path string) (ret *Models, err error) { evaluator, err := pkl.NewEvaluator(ctx, pkl.PreconfiguredOptions) if err != nil { return nil, err @@ -26,9 +26,9 @@ func LoadFromPath(ctx context.Context, path string) (ret *Oidc, err error) { return ret, err } -// Load loads the pkl module at the given source and evaluates it with the given evaluator into a Oidc -func Load(ctx context.Context, evaluator pkl.Evaluator, source *pkl.ModuleSource) (*Oidc, error) { - var ret Oidc +// Load loads the pkl module at the given source and evaluates it with the given evaluator into a Models +func Load(ctx context.Context, evaluator pkl.Evaluator, source *pkl.ModuleSource) (*Models, error) { + var ret Models if err := evaluator.EvaluateModule(ctx, source, &ret); err != nil { return nil, err } diff --git a/internal/db/orm/Permission.pkl.go b/internal/dwn/models/Permission.pkl.go similarity index 87% rename from internal/db/orm/Permission.pkl.go rename to internal/dwn/models/Permission.pkl.go index 0e93df3c3..abcf16be1 100644 --- a/internal/db/orm/Permission.pkl.go +++ b/internal/dwn/models/Permission.pkl.go @@ -1,5 +1,5 @@ -// Code generated from Pkl module `orm`. DO NOT EDIT. -package orm +// Code generated from Pkl module `models`. DO NOT EDIT. +package models type Permission struct { Id uint `pkl:"id" gorm:"primaryKey,autoIncrement" json:"id,omitempty" query:"id"` diff --git a/internal/db/orm/Profile.pkl.go b/internal/dwn/models/Profile.pkl.go similarity index 91% rename from internal/db/orm/Profile.pkl.go rename to internal/dwn/models/Profile.pkl.go index c0153cc3c..de2754519 100644 --- a/internal/db/orm/Profile.pkl.go +++ b/internal/dwn/models/Profile.pkl.go @@ -1,5 +1,5 @@ -// Code generated from Pkl module `orm`. DO NOT EDIT. -package orm +// Code generated from Pkl module `models`. DO NOT EDIT. +package models type Profile struct { Id string `pkl:"id" gorm:"primaryKey,autoIncrement" json:"id,omitempty" query:"id"` diff --git a/internal/db/orm/Property.pkl.go b/internal/dwn/models/Property.pkl.go similarity index 85% rename from internal/db/orm/Property.pkl.go rename to internal/dwn/models/Property.pkl.go index 937b6209a..05bc1d873 100644 --- a/internal/db/orm/Property.pkl.go +++ b/internal/dwn/models/Property.pkl.go @@ -1,5 +1,5 @@ -// Code generated from Pkl module `orm`. DO NOT EDIT. -package orm +// Code generated from Pkl module `models`. DO NOT EDIT. +package models type Property struct { Id uint `pkl:"id" gorm:"primaryKey,autoIncrement" json:"id,omitempty" query:"id"` diff --git a/internal/dwn/models/init.pkl.go b/internal/dwn/models/init.pkl.go new file mode 100644 index 000000000..a51dc552e --- /dev/null +++ b/internal/dwn/models/init.pkl.go @@ -0,0 +1,17 @@ +// Code generated from Pkl module `models`. DO NOT EDIT. +package models + +import "github.com/apple/pkl-go/pkl" + +func init() { + pkl.RegisterMapping("models", Models{}) + pkl.RegisterMapping("models#Account", Account{}) + pkl.RegisterMapping("models#Asset", Asset{}) + pkl.RegisterMapping("models#Chain", Chain{}) + pkl.RegisterMapping("models#Credential", Credential{}) + pkl.RegisterMapping("models#Profile", Profile{}) + pkl.RegisterMapping("models#Property", Property{}) + pkl.RegisterMapping("models#Keyshare", Keyshare{}) + pkl.RegisterMapping("models#Permission", Permission{}) + pkl.RegisterMapping("models#DiscoveryDocument", DiscoveryDocument{}) +} diff --git a/internal/db/orm/orm.go b/internal/dwn/models/orm.go similarity index 96% rename from internal/db/orm/orm.go rename to internal/dwn/models/orm.go index 1b1266bf1..278dc66b1 100644 --- a/internal/db/orm/orm.go +++ b/internal/dwn/models/orm.go @@ -1,4 +1,4 @@ -package orm +package models func (a *Account) Table() string { return "accounts" diff --git a/x/did/types/txns/Msg.pkl.go b/internal/dwn/txns/Msg.pkl.go similarity index 100% rename from x/did/types/txns/Msg.pkl.go rename to internal/dwn/txns/Msg.pkl.go diff --git a/x/did/types/txns/MsgDidAllocateVault.pkl.go b/internal/dwn/txns/MsgDidAllocateVault.pkl.go similarity index 100% rename from x/did/types/txns/MsgDidAllocateVault.pkl.go rename to internal/dwn/txns/MsgDidAllocateVault.pkl.go diff --git a/x/did/types/txns/MsgDidAuthorize.pkl.go b/internal/dwn/txns/MsgDidAuthorize.pkl.go similarity index 100% rename from x/did/types/txns/MsgDidAuthorize.pkl.go rename to internal/dwn/txns/MsgDidAuthorize.pkl.go diff --git a/x/did/types/txns/MsgDidProveWitness.pkl.go b/internal/dwn/txns/MsgDidProveWitness.pkl.go similarity index 100% rename from x/did/types/txns/MsgDidProveWitness.pkl.go rename to internal/dwn/txns/MsgDidProveWitness.pkl.go diff --git a/x/did/types/txns/MsgDidRegisterController.pkl.go b/internal/dwn/txns/MsgDidRegisterController.pkl.go similarity index 100% rename from x/did/types/txns/MsgDidRegisterController.pkl.go rename to internal/dwn/txns/MsgDidRegisterController.pkl.go diff --git a/x/did/types/txns/MsgDidRegisterService.pkl.go b/internal/dwn/txns/MsgDidRegisterService.pkl.go similarity index 100% rename from x/did/types/txns/MsgDidRegisterService.pkl.go rename to internal/dwn/txns/MsgDidRegisterService.pkl.go diff --git a/x/did/types/txns/MsgDidSyncVault.pkl.go b/internal/dwn/txns/MsgDidSyncVault.pkl.go similarity index 100% rename from x/did/types/txns/MsgDidSyncVault.pkl.go rename to internal/dwn/txns/MsgDidSyncVault.pkl.go diff --git a/x/did/types/txns/MsgDidUpdateParams.pkl.go b/internal/dwn/txns/MsgDidUpdateParams.pkl.go similarity index 100% rename from x/did/types/txns/MsgDidUpdateParams.pkl.go rename to internal/dwn/txns/MsgDidUpdateParams.pkl.go diff --git a/x/did/types/txns/MsgGovDeposit.pkl.go b/internal/dwn/txns/MsgGovDeposit.pkl.go similarity index 100% rename from x/did/types/txns/MsgGovDeposit.pkl.go rename to internal/dwn/txns/MsgGovDeposit.pkl.go diff --git a/x/did/types/txns/MsgGovSubmitProposal.pkl.go b/internal/dwn/txns/MsgGovSubmitProposal.pkl.go similarity index 100% rename from x/did/types/txns/MsgGovSubmitProposal.pkl.go rename to internal/dwn/txns/MsgGovSubmitProposal.pkl.go diff --git a/x/did/types/txns/MsgGovVote.pkl.go b/internal/dwn/txns/MsgGovVote.pkl.go similarity index 100% rename from x/did/types/txns/MsgGovVote.pkl.go rename to internal/dwn/txns/MsgGovVote.pkl.go diff --git a/x/did/types/txns/MsgGroupCreateGroup.pkl.go b/internal/dwn/txns/MsgGroupCreateGroup.pkl.go similarity index 100% rename from x/did/types/txns/MsgGroupCreateGroup.pkl.go rename to internal/dwn/txns/MsgGroupCreateGroup.pkl.go diff --git a/x/did/types/txns/MsgGroupSubmitProposal.pkl.go b/internal/dwn/txns/MsgGroupSubmitProposal.pkl.go similarity index 100% rename from x/did/types/txns/MsgGroupSubmitProposal.pkl.go rename to internal/dwn/txns/MsgGroupSubmitProposal.pkl.go diff --git a/x/did/types/txns/MsgGroupVote.pkl.go b/internal/dwn/txns/MsgGroupVote.pkl.go similarity index 100% rename from x/did/types/txns/MsgGroupVote.pkl.go rename to internal/dwn/txns/MsgGroupVote.pkl.go diff --git a/x/did/types/txns/MsgStakingBeginRedelegate.pkl.go b/internal/dwn/txns/MsgStakingBeginRedelegate.pkl.go similarity index 100% rename from x/did/types/txns/MsgStakingBeginRedelegate.pkl.go rename to internal/dwn/txns/MsgStakingBeginRedelegate.pkl.go diff --git a/x/did/types/txns/MsgStakingCreateValidator.pkl.go b/internal/dwn/txns/MsgStakingCreateValidator.pkl.go similarity index 100% rename from x/did/types/txns/MsgStakingCreateValidator.pkl.go rename to internal/dwn/txns/MsgStakingCreateValidator.pkl.go diff --git a/x/did/types/txns/MsgStakingDelegate.pkl.go b/internal/dwn/txns/MsgStakingDelegate.pkl.go similarity index 100% rename from x/did/types/txns/MsgStakingDelegate.pkl.go rename to internal/dwn/txns/MsgStakingDelegate.pkl.go diff --git a/x/did/types/txns/MsgStakingUndelegate.pkl.go b/internal/dwn/txns/MsgStakingUndelegate.pkl.go similarity index 100% rename from x/did/types/txns/MsgStakingUndelegate.pkl.go rename to internal/dwn/txns/MsgStakingUndelegate.pkl.go diff --git a/x/did/types/txns/Proposal.pkl.go b/internal/dwn/txns/Proposal.pkl.go similarity index 100% rename from x/did/types/txns/Proposal.pkl.go rename to internal/dwn/txns/Proposal.pkl.go diff --git a/x/did/types/txns/TxBody.pkl.go b/internal/dwn/txns/TxBody.pkl.go similarity index 100% rename from x/did/types/txns/TxBody.pkl.go rename to internal/dwn/txns/TxBody.pkl.go diff --git a/x/did/types/txns/Txns.pkl.go b/internal/dwn/txns/Txns.pkl.go similarity index 100% rename from x/did/types/txns/Txns.pkl.go rename to internal/dwn/txns/Txns.pkl.go diff --git a/x/did/types/txns/init.pkl.go b/internal/dwn/txns/init.pkl.go similarity index 100% rename from x/did/types/txns/init.pkl.go rename to internal/dwn/txns/init.pkl.go diff --git a/internal/gui/views/home.templ b/internal/dwn/views/home.templ similarity index 93% rename from internal/gui/views/home.templ rename to internal/dwn/views/home.templ index 34b505522..6871aa11e 100644 --- a/internal/gui/views/home.templ +++ b/internal/dwn/views/home.templ @@ -2,7 +2,7 @@ package views import ( "github.com/labstack/echo/v4" - "github.com/onsonr/sonr/internal/gui/elements" + "github.com/onsonr/sonr/internal/dwn/elements" ) func HomeView(c echo.Context) error { diff --git a/internal/gui/views/home_templ.go b/internal/dwn/views/home_templ.go similarity index 99% rename from internal/gui/views/home_templ.go rename to internal/dwn/views/home_templ.go index 8259d8a94..71d17b222 100644 --- a/internal/gui/views/home_templ.go +++ b/internal/dwn/views/home_templ.go @@ -10,7 +10,7 @@ import templruntime "github.com/a-h/templ/runtime" import ( "github.com/labstack/echo/v4" - "github.com/onsonr/sonr/internal/gui/elements" + "github.com/onsonr/sonr/internal/dwn/elements" ) func HomeView(c echo.Context) error { diff --git a/internal/gui/views/login.templ b/internal/dwn/views/login.templ similarity index 91% rename from internal/gui/views/login.templ rename to internal/dwn/views/login.templ index 601dc0aae..22932ed4b 100644 --- a/internal/gui/views/login.templ +++ b/internal/dwn/views/login.templ @@ -2,7 +2,7 @@ package views import ( "github.com/labstack/echo/v4" - "github.com/onsonr/sonr/internal/gui/elements" + "github.com/onsonr/sonr/internal/dwn/elements" ) func LoginView(c echo.Context) error { diff --git a/internal/gui/views/login_templ.go b/internal/dwn/views/login_templ.go similarity index 99% rename from internal/gui/views/login_templ.go rename to internal/dwn/views/login_templ.go index 7ec36e580..a07efe694 100644 --- a/internal/gui/views/login_templ.go +++ b/internal/dwn/views/login_templ.go @@ -10,7 +10,7 @@ import templruntime "github.com/a-h/templ/runtime" import ( "github.com/labstack/echo/v4" - "github.com/onsonr/sonr/internal/gui/elements" + "github.com/onsonr/sonr/internal/dwn/elements" ) func LoginView(c echo.Context) error { diff --git a/internal/gui/views/openid.templ b/internal/dwn/views/openid.templ similarity index 88% rename from internal/gui/views/openid.templ rename to internal/dwn/views/openid.templ index f09cdc270..3a9f66e2e 100644 --- a/internal/gui/views/openid.templ +++ b/internal/dwn/views/openid.templ @@ -2,7 +2,7 @@ package views import ( "github.com/labstack/echo/v4" - "github.com/onsonr/sonr/internal/gui/elements" + "github.com/onsonr/sonr/internal/dwn/elements" ) func AuthorizeView(c echo.Context) error { diff --git a/internal/gui/views/openid_templ.go b/internal/dwn/views/openid_templ.go similarity index 98% rename from internal/gui/views/openid_templ.go rename to internal/dwn/views/openid_templ.go index 1f62a9b5d..a4a0e5196 100644 --- a/internal/gui/views/openid_templ.go +++ b/internal/dwn/views/openid_templ.go @@ -10,7 +10,7 @@ import templruntime "github.com/a-h/templ/runtime" import ( "github.com/labstack/echo/v4" - "github.com/onsonr/sonr/internal/gui/elements" + "github.com/onsonr/sonr/internal/dwn/elements" ) func AuthorizeView(c echo.Context) error { diff --git a/internal/gui/views/profile.templ b/internal/dwn/views/profile.templ similarity index 87% rename from internal/gui/views/profile.templ rename to internal/dwn/views/profile.templ index 25c272e99..c9edbab54 100644 --- a/internal/gui/views/profile.templ +++ b/internal/dwn/views/profile.templ @@ -2,7 +2,7 @@ package views import ( "github.com/labstack/echo/v4" - "github.com/onsonr/sonr/internal/gui/elements" + "github.com/onsonr/sonr/internal/dwn/elements" ) func ProfileView(c echo.Context) error { diff --git a/internal/gui/views/profile_templ.go b/internal/dwn/views/profile_templ.go similarity index 98% rename from internal/gui/views/profile_templ.go rename to internal/dwn/views/profile_templ.go index 189837b19..050e4460c 100644 --- a/internal/gui/views/profile_templ.go +++ b/internal/dwn/views/profile_templ.go @@ -10,7 +10,7 @@ import templruntime "github.com/a-h/templ/runtime" import ( "github.com/labstack/echo/v4" - "github.com/onsonr/sonr/internal/gui/elements" + "github.com/onsonr/sonr/internal/dwn/elements" ) func ProfileView(c echo.Context) error { diff --git a/internal/gui/views/register.templ b/internal/dwn/views/register.templ similarity index 78% rename from internal/gui/views/register.templ rename to internal/dwn/views/register.templ index 076d4d992..1380135e8 100644 --- a/internal/gui/views/register.templ +++ b/internal/dwn/views/register.templ @@ -2,8 +2,8 @@ package views import ( "github.com/labstack/echo/v4" - "github.com/onsonr/sonr/internal/gui/elements" - "github.com/onsonr/sonr/internal/gui/forms" + "github.com/onsonr/sonr/internal/dwn/elements" + "github.com/onsonr/sonr/internal/dwn/islands" ) func RegisterView(c echo.Context) error { @@ -16,7 +16,7 @@ templ renderRegisterView(c echo.Context) { @elements.H2("Account Registration") @elements.Spacer() @elements.Breadcrumbs() - @forms.BasicInfo(c, forms.InitialForm) + @islands.BasicInfo(c, islands.InitialForm) @elements.Spacer() @elements.Button(elements.GET("/", "#register-view")) { @elements.Text("Cancel") diff --git a/internal/gui/views/register_templ.go b/internal/dwn/views/register_templ.go similarity index 96% rename from internal/gui/views/register_templ.go rename to internal/dwn/views/register_templ.go index 3a10827f4..5f329e025 100644 --- a/internal/gui/views/register_templ.go +++ b/internal/dwn/views/register_templ.go @@ -10,8 +10,8 @@ import templruntime "github.com/a-h/templ/runtime" import ( "github.com/labstack/echo/v4" - "github.com/onsonr/sonr/internal/gui/elements" - "github.com/onsonr/sonr/internal/gui/forms" + "github.com/onsonr/sonr/internal/dwn/elements" + "github.com/onsonr/sonr/internal/dwn/islands" ) func RegisterView(c echo.Context) error { @@ -84,7 +84,7 @@ func renderRegisterView(c echo.Context) templ.Component { if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = forms.BasicInfo(c, forms.InitialForm).Render(ctx, templ_7745c5c3_Buffer) + templ_7745c5c3_Err = islands.BasicInfo(c, islands.InitialForm).Render(ctx, templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } diff --git a/internal/gui/views/views.go b/internal/dwn/views/views.go similarity index 100% rename from internal/gui/views/views.go rename to internal/dwn/views/views.go diff --git a/internal/vfs/wasm/request.go b/internal/dwn/wasm/request.go similarity index 100% rename from internal/vfs/wasm/request.go rename to internal/dwn/wasm/request.go diff --git a/internal/vfs/wasm/response.go b/internal/dwn/wasm/response.go similarity index 100% rename from internal/vfs/wasm/response.go rename to internal/dwn/wasm/response.go diff --git a/internal/vfs/wasm/serve.go b/internal/dwn/wasm/serve.go similarity index 100% rename from internal/vfs/wasm/serve.go rename to internal/dwn/wasm/serve.go diff --git a/internal/vfs/dwn.wasm b/internal/vfs/dwn.wasm index 272ccbefa..464fcfd4a 100755 Binary files a/internal/vfs/dwn.wasm and b/internal/vfs/dwn.wasm differ diff --git a/pkl/api.pkl b/pkl/api.pkl deleted file mode 100644 index f18251ac6..000000000 --- a/pkl/api.pkl +++ /dev/null @@ -1,37 +0,0 @@ -@go.Package { name = "github.com/onsonr/sonr/motr/api" } - -module api - -import "package://pkg.pkl-lang.org/pkl-go/pkl.golang@0.5.0#/go.pkl" - -class JsonField extends go.Field { - structTags { - ["json"] = "%{name},omitempty" - } -} - -abstract class Request { - route: String - method: String - headers: Map - origin: String? - userAgent: String? - body: Dynamic -} - -abstract class Response { - statusCode: Int - headers: Map - body: Dynamic -} - -class GetAccountsRequest extends Request { - route = "/accounts" - method = "GET" - headers = { - "Content-Type" = "application/json" - } - origin = null - userAgent = null - body = null -} diff --git a/pkl/bake.pkl b/pkl/bake.pkl deleted file mode 100644 index 927e5ea37..000000000 --- a/pkl/bake.pkl +++ /dev/null @@ -1,30 +0,0 @@ -@go.Package { name = "github.com/onsonr/sonr/motr/api/bake" } - -module bake - -import "package://pkg.pkl-lang.org/pkl-go/pkl.golang@0.5.0#/go.pkl" - -class JsonField extends go.Field { - structTags { - ["json"] = "%{name},omitempty" - } -} - -abstract class Macroon { - id: String - location: String -} - -abstract class FirstPartyCaveats { - scope: String - exp: Int - cnf: String - aud: String -} - -abstract class ThirdPartyCaveats { - scope: String - exp: Int - cnf: String - aud: String -} diff --git a/pkl/oidc.pkl b/pkl/oidc.pkl deleted file mode 100644 index 2437be298..000000000 --- a/pkl/oidc.pkl +++ /dev/null @@ -1,59 +0,0 @@ -@go.Package { name = "github.com/onsonr/sonr/x/did/types/oidc" } - -module oidc - -import "package://pkg.pkl-lang.org/pkl-go/pkl.golang@0.5.0#/go.pkl" - -class JsonField extends go.Field { - structTags { - ["json"] = "%{name},omitempty" - ["param"] = "%{name}" - } -} - -class DiscoveryDocument { - @JsonField - issuer: String - - @JsonField - authorization_endpoint: String - - @JsonField - token_endpoint: String - - @JsonField - userinfo_endpoint: String - - @JsonField - jwks_uri: String - - @JsonField - registration_endpoint: String - - @JsonField - scopes_supported: List - - @JsonField - response_types_supported: List - - @JsonField - response_modes_supported: List - - @JsonField - subject_types_supported: List - - @JsonField - id_token_signing_alg_values_supported: List - - @JsonField - claims_supported: List - - @JsonField - grant_types_supported: List - - @JsonField - acr_values_supported: List - - @JsonField - token_endpoint_auth_methods_supported: List -} diff --git a/web/README.md b/web/README.md new file mode 100644 index 000000000..10ca30fcc --- /dev/null +++ b/web/README.md @@ -0,0 +1,18 @@ +# sonr.id + +A public decentralized web node client for the Sonr Network. + +## Development + +### Prerequisites + +- Bun +- Devbox +- Docker + +### Setup + +1. Install [Devbox](https://github.com/jetpack-io/devbox) +2. Install [Bun](https://bun.sh/docs/installation) +3. Install [Docker](https://docs.docker.com/get-docker/) +4. Run `devbox run dev` diff --git a/cmd/motr/main.go b/web/main.go similarity index 71% rename from cmd/motr/main.go rename to web/main.go index 8fdf0d6ba..dcaac542b 100644 --- a/cmd/motr/main.go +++ b/web/main.go @@ -6,11 +6,9 @@ import ( "github.com/labstack/echo/v4" "github.com/syumai/workers" - "github.com/onsonr/sonr/internal/db" - - "github.com/onsonr/sonr/internal/gui/views" - "github.com/onsonr/sonr/internal/mdw" - "github.com/onsonr/sonr/internal/svc" + svc "github.com/onsonr/sonr/internal/dwn/handlers" + mdw "github.com/onsonr/sonr/internal/dwn/middleware" + "github.com/onsonr/sonr/internal/dwn/views" ) func main() { @@ -23,7 +21,7 @@ func main() { // Setup routes registerFrontend(e) registerOpenID(e.Group("/authorize")) - registerVault(e.Group("/vault")) + // registerVault(e.Group("/vault")) // Serve Worker workers.Serve(e) @@ -49,13 +47,3 @@ func registerOpenID(g *echo.Group) { g.GET("/token", svc.GetToken) g.POST("/:origin/grant/:subject", svc.GrantAuthorization) } - -func registerVault(g *echo.Group) { - // Add Authenticated Pages - g.Use(mdw.MacaroonMiddleware("test", "test")) - vault, err := db.New(db.WitDir("vault")) - if err != nil { - // panic(err) - } - vault.ServeEcho(g) -} diff --git a/cmd/motr/wrangler.toml b/web/wrangler.toml similarity index 100% rename from cmd/motr/wrangler.toml rename to web/wrangler.toml diff --git a/x/did/builder/openid.go b/x/did/builder/openid.go index acd3ba380..d55743e6c 100644 --- a/x/did/builder/openid.go +++ b/x/did/builder/openid.go @@ -3,12 +3,12 @@ package builder import ( "fmt" - "github.com/onsonr/sonr/x/did/types/oidc" + "github.com/onsonr/sonr/internal/dwn/models" ) -func GetDiscovery(origin string) *oidc.DiscoveryDocument { +func GetDiscovery(origin string) *models.DiscoveryDocument { baseURL := "https://" + origin // Ensure this is the correct base URL for your service - discoveryDoc := &oidc.DiscoveryDocument{ + discoveryDoc := &models.DiscoveryDocument{ Issuer: baseURL, AuthorizationEndpoint: fmt.Sprintf("%s/auth", baseURL), TokenEndpoint: fmt.Sprintf("%s/token", baseURL), diff --git a/x/did/types/oidc/init.pkl.go b/x/did/types/oidc/init.pkl.go deleted file mode 100644 index 0f351c673..000000000 --- a/x/did/types/oidc/init.pkl.go +++ /dev/null @@ -1,9 +0,0 @@ -// Code generated from Pkl module `oidc`. DO NOT EDIT. -package oidc - -import "github.com/apple/pkl-go/pkl" - -func init() { - pkl.RegisterMapping("oidc", Oidc{}) - pkl.RegisterMapping("oidc#DiscoveryDocument", DiscoveryDocument{}) -}