mirror of
https://github.com/sonr-io/sonr.git
synced 2026-08-03 01:41:44 +00:00
feature/1111 sync chain dwn endpoint (#1143)
- **feat(did): add assertion type to DID spec** - **refactor: update build process to include assets generation** - **refactor: update import paths for to** - **feat: introduce new authentication state management** - **feat: add current account route** - **feat: implement global toasts with custom HTML** - **refactor: remove unused session code** - **feat: add config.json to embedded assets** - **refactor: remove unused dependency on gorilla/sessions** - **refactor: simplify session management and remove unnecessary fields** - **fix: remove unnecessary import for unused protobuf types** - **feat: introduce separate HTTP contexts for Highway and DWN** - **fix(keeper): Handle missing controller during initial sync** - **refactor: extract DWN configuration from DWNContext** - **feat: add view route** - **fix: update configuration file name in embed.go** - **feat: improve vaultindex page loading experience** - **feat(hway): add highway context to echo context** - **chore(deps): bump onsonr/crypto from 1.32.0 to 1.33.0** - **refactor: rename DWNSessionMiddleware to WebNodeSessionMiddleware** - **feat: rename client API to web node API** - **refactor: separate API and view routes** - **refactor: remove unused build targets in Makefile** - **feat: add Devbox integration to container** - **feat: add wasm support for dwn** - **refactor: update module proto import** - **feat: add default first and third party caveats** - **feat: Add target vault allocation mechanism** - **refactor: introduce standardized session cookie handling** - **fix: update service worker installation and ready states** - **feat: add worker handlers** - **feat: Enable SSH access to devcontainer** - **refactor: rename HighwayContext to HwayContext** - **feat: add block expiration calculation to sonr context** - **feat: remove config from cookie and header** - **feat(gen): Remove generated code for IPFS, Motr and Sonr** - **refactor: remove unused createMotrConfig function** - **feat: add project analytics with Repobeats** - **docs: Remove component details from README** - **refactor: rename SetConfig to injectConfig**
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
package client
|
||||
|
||||
import "net/http"
|
||||
|
||||
// SonrClient is a REST HTTP client for Querying Module Endpoints
|
||||
// for the Sonr blockchain.
|
||||
type SonrClient struct {
|
||||
apiURL string
|
||||
}
|
||||
|
||||
// NewLocal creates a new SonrClient for local development.
|
||||
func NewLocal() (*SonrClient, error) {
|
||||
// create http client
|
||||
client := &SonrClient{
|
||||
apiURL: "http://localhost:1323",
|
||||
}
|
||||
// Issue ping to check if server is up
|
||||
resp, err := http.Get(client.apiURL + "/genesis")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
// Check if server is up
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
return nil, err
|
||||
}
|
||||
return client, nil
|
||||
}
|
||||
|
||||
// NewRemote creates a new SonrClient for remote production.
|
||||
func NewRemote() (*SonrClient, error) {
|
||||
return &SonrClient{}, nil
|
||||
}
|
||||
@@ -4,7 +4,6 @@ import (
|
||||
"github.com/go-webauthn/webauthn/protocol"
|
||||
"github.com/labstack/echo/v4"
|
||||
|
||||
"github.com/onsonr/sonr/internal/ctx"
|
||||
"github.com/onsonr/sonr/internal/orm"
|
||||
)
|
||||
|
||||
@@ -12,11 +11,11 @@ import (
|
||||
// │ Login Handlers │
|
||||
// ╰───────────────────────────────────────────────────────────╯
|
||||
|
||||
func LoginSubjectCheck(e echo.Context) error {
|
||||
func (a *authAPI) LoginSubjectCheck(e echo.Context) error {
|
||||
return e.JSON(200, "HandleCredentialAssertion")
|
||||
}
|
||||
|
||||
func LoginSubjectStart(e echo.Context) error {
|
||||
func (a *authAPI) LoginSubjectStart(e echo.Context) error {
|
||||
opts := &protocol.PublicKeyCredentialRequestOptions{
|
||||
UserVerification: "preferred",
|
||||
Challenge: []byte("challenge"),
|
||||
@@ -24,7 +23,7 @@ func LoginSubjectStart(e echo.Context) error {
|
||||
return e.JSON(200, opts)
|
||||
}
|
||||
|
||||
func LoginSubjectFinish(e echo.Context) error {
|
||||
func (a *authAPI) LoginSubjectFinish(e echo.Context) error {
|
||||
var crr protocol.CredentialAssertionResponse
|
||||
if err := e.Bind(&crr); err != nil {
|
||||
return err
|
||||
@@ -36,29 +35,25 @@ func LoginSubjectFinish(e echo.Context) error {
|
||||
// │ Register Handlers │
|
||||
// ╰───────────────────────────────────────────────────────────╯
|
||||
|
||||
func RegisterSubjectCheck(e echo.Context) error {
|
||||
func (a *authAPI) RegisterSubjectCheck(e echo.Context) error {
|
||||
subject := e.FormValue("subject")
|
||||
return e.JSON(200, subject)
|
||||
}
|
||||
|
||||
func RegisterSubjectStart(e echo.Context) error {
|
||||
func (a *authAPI) RegisterSubjectStart(e echo.Context) error {
|
||||
// Get subject and address
|
||||
subject := e.FormValue("subject")
|
||||
address := e.FormValue("address")
|
||||
|
||||
// Set address in session
|
||||
s := ctx.GetSession(e)
|
||||
s = ctx.SetAddress(e, address)
|
||||
|
||||
// Get challenge
|
||||
chal, err := s.GetChallenge(subject)
|
||||
chal, err := protocol.CreateChallenge()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return e.JSON(201, orm.NewCredentialCreationOptions(subject, address, chal))
|
||||
}
|
||||
|
||||
func RegisterSubjectFinish(e echo.Context) error {
|
||||
func (a *authAPI) RegisterSubjectFinish(e echo.Context) error {
|
||||
// Deserialize the JSON into a temporary struct
|
||||
var ccr protocol.CredentialCreationResponse
|
||||
if err := e.Bind(&ccr); err != nil {
|
||||
@@ -75,3 +70,11 @@ func RegisterSubjectFinish(e echo.Context) error {
|
||||
// // credential := orm.NewCredential(parsedData, e.Request().Host, "")
|
||||
return e.JSON(201, ccr)
|
||||
}
|
||||
|
||||
// ╭───────────────────────────────────────────────────────────╮
|
||||
// │ Group Structures │
|
||||
// ╰───────────────────────────────────────────────────────────╯
|
||||
|
||||
type authAPI struct{}
|
||||
|
||||
var Auth = new(authAPI)
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
package handlers
|
||||
@@ -4,20 +4,28 @@ import (
|
||||
"github.com/labstack/echo/v4"
|
||||
)
|
||||
|
||||
func GrantAuthorization(e echo.Context) error {
|
||||
func (a *openidAPI) GrantAuthorization(e echo.Context) error {
|
||||
// Implement authorization endpoint using passkey authentication
|
||||
// Store session data in cache
|
||||
return nil
|
||||
}
|
||||
|
||||
func GetJWKS(e echo.Context) error {
|
||||
func (a *openidAPI) GetJWKS(e echo.Context) error {
|
||||
// Implement token endpoint
|
||||
// Use cached session data for validation
|
||||
return nil
|
||||
}
|
||||
|
||||
func GetToken(e echo.Context) error {
|
||||
func (a *openidAPI) GetToken(e echo.Context) error {
|
||||
// Implement token endpoint
|
||||
// Use cached session data for validation
|
||||
return nil
|
||||
}
|
||||
|
||||
// ╭───────────────────────────────────────────────────────────╮
|
||||
// │ Group Structures │
|
||||
// ╰───────────────────────────────────────────────────────────╯
|
||||
|
||||
type openidAPI struct{}
|
||||
|
||||
var OpenID = new(openidAPI)
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
package handlers
|
||||
@@ -2,7 +2,24 @@ package handlers
|
||||
|
||||
import "github.com/labstack/echo/v4"
|
||||
|
||||
func GetDatabaseSchema(e echo.Context) error {
|
||||
// ╭───────────────────────────────────────────────────────────╮
|
||||
// │ Dexie Database Handlers │
|
||||
// ╰───────────────────────────────────────────────────────────╯
|
||||
|
||||
func (a *syncAPI) FetchInitial(e echo.Context) error {
|
||||
// Implement database schema endpoint
|
||||
return nil
|
||||
}
|
||||
|
||||
func (a *syncAPI) FetchCurrent(e echo.Context) error {
|
||||
// Implement account entries endpoint
|
||||
return nil
|
||||
}
|
||||
|
||||
// ╭───────────────────────────────────────────────────────────╮
|
||||
// │ Group Structures │
|
||||
// ╰───────────────────────────────────────────────────────────╯
|
||||
|
||||
type syncAPI struct{}
|
||||
|
||||
var Sync = new(syncAPI)
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
package routes
|
||||
|
||||
import (
|
||||
"github.com/labstack/echo/v4"
|
||||
|
||||
"github.com/onsonr/sonr/pkg/nebula/components/auth"
|
||||
"github.com/onsonr/sonr/pkg/nebula/components/home"
|
||||
"github.com/onsonr/sonr/pkg/workers/handlers"
|
||||
)
|
||||
|
||||
func RegisterClientAPI(e *echo.Echo) {
|
||||
g1 := e.Group("api")
|
||||
g1.GET("/register/:subject/start", handlers.RegisterSubjectStart)
|
||||
g1.POST("/register/:subject/check", handlers.RegisterSubjectCheck)
|
||||
g1.POST("/register/:subject/finish", handlers.RegisterSubjectFinish)
|
||||
|
||||
g1.GET("/login/:subject/start", handlers.LoginSubjectStart)
|
||||
g1.POST("/login/:subject/check", handlers.LoginSubjectCheck)
|
||||
g1.POST("/login/:subject/finish", handlers.LoginSubjectFinish)
|
||||
|
||||
g1.GET("/jwks", handlers.GetJWKS)
|
||||
g1.GET("/token", handlers.GetToken)
|
||||
g1.POST("/:origin/grant/:subject", handlers.GrantAuthorization)
|
||||
}
|
||||
|
||||
func RegisterClientViews(e *echo.Echo) {
|
||||
e.GET("/home", home.Route)
|
||||
e.GET("/login", auth.LoginRoute)
|
||||
e.GET("/register", auth.RegisterRoute)
|
||||
}
|
||||
@@ -3,15 +3,15 @@ package routes
|
||||
import (
|
||||
"github.com/labstack/echo/v4"
|
||||
|
||||
"github.com/onsonr/sonr/pkg/nebula/components/auth"
|
||||
"github.com/onsonr/sonr/pkg/nebula/components/home"
|
||||
"github.com/onsonr/sonr/pkg/nebula/components/authentication"
|
||||
"github.com/onsonr/sonr/pkg/nebula/components/marketing"
|
||||
)
|
||||
|
||||
func RegisterProxyAPI(e *echo.Echo) {
|
||||
func RegisterGatewayAPI(e *echo.Echo) {
|
||||
}
|
||||
|
||||
func RegisterProxyViews(e *echo.Echo) {
|
||||
e.GET("/", home.Route)
|
||||
e.GET("/login", auth.LoginRoute)
|
||||
e.GET("/register", auth.RegisterRoute)
|
||||
func RegisterGatewayViews(e *echo.Echo) {
|
||||
e.GET("/", marketing.HomeRoute)
|
||||
e.GET("/login", authentication.LoginModalRoute)
|
||||
e.GET("/register", authentication.RegisterModalRoute)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
package routes
|
||||
|
||||
import (
|
||||
"github.com/labstack/echo/v4"
|
||||
|
||||
"github.com/onsonr/sonr/pkg/nebula/components/authentication"
|
||||
"github.com/onsonr/sonr/pkg/workers/handlers"
|
||||
)
|
||||
|
||||
func RegisterWebNodeAPI(e *echo.Echo) {
|
||||
g1 := e.Group("api")
|
||||
g1.GET("/register/:subject/start", handlers.Auth.RegisterSubjectStart)
|
||||
g1.POST("/register/:subject/check", handlers.Auth.RegisterSubjectCheck)
|
||||
g1.POST("/register/:subject/finish", handlers.Auth.RegisterSubjectFinish)
|
||||
|
||||
g1.GET("/login/:subject/start", handlers.Auth.LoginSubjectStart)
|
||||
g1.POST("/login/:subject/check", handlers.Auth.LoginSubjectCheck)
|
||||
g1.POST("/login/:subject/finish", handlers.Auth.LoginSubjectFinish)
|
||||
|
||||
g1.GET("/:origin/grant/jwks", handlers.OpenID.GetJWKS)
|
||||
g1.GET("/:origin/grant/token", handlers.OpenID.GetToken)
|
||||
g1.POST("/:origin/grant/:subject", handlers.OpenID.GrantAuthorization)
|
||||
}
|
||||
|
||||
func RegisterWebNodeViews(e *echo.Echo) {
|
||||
e.File("/", "index.html")
|
||||
e.GET("/#", authentication.CurrentViewRoute)
|
||||
e.GET("/login", authentication.LoginModalRoute)
|
||||
e.File("/config", "config.json")
|
||||
e.GET("/register", authentication.RegisterModalRoute)
|
||||
}
|
||||
Reference in New Issue
Block a user