feature/1129 integrate webauthn controller (#1135)

* **refactor: remove nebula static file serving**
* **feat: Add login, register, and authorize sections**
* **feat: implement registration form UI**
* **refactor: abstract template rendering to ctx module**
* **feat: add deployment target for Highway gateway**
* **feat: migrate Highway gateway to Cloudflare Workers**
* **feat: refactor nebula routes to components**
* **chore(deps): remove unused dependencies**
* **chore(deps): remove unused dependencies**
* **feat: add user and relaying party entities**
* **refactor: remove unused imports**
* 
* **feat: add motion scale-in and opacity-in animations**
* **refactor: move dwn and orm packages to internal**
* **refactor: update imports to use relative paths**
* **refactor: rename build targets for clarity**
* **feat: add RelayingPartyEntity model**
* **refactor: rename creds templates to credentials**
* **refactor: remove unused entity model**
* **refactor: move models to internal package**
* **refactor: move models package to internal/orm**
* **feat: implement broadcast channel context**
* **feat: remove config upload step**
* **feat: remove unused configuration files**
* **feat: migrate authentication logic to workers**
* **feat: remove cloudflared dependency**
* **refactor: move client related routes to 'routes/client.go'**
* **feat: implement macaroon middleware**
* **refactor: move fetch package to cmd/motr**
* **feat: remove auth and grant endpoints**
* **docs: add conceptual descriptions to did module**

<sub><a
href="https://huly.app/guest/sonrhq?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsaW5rSWQiOiI2NzA4MTIyNmM3ZDZhNTZhOGY4ZGFjOTciLCJndWVzdCI6InRydWUiLCJlbWFpbCI6IiNndWVzdEBoYy5lbmdpbmVlcmluZyIsIndvcmtzcGFjZSI6InctcHJhZC1zb25yaHEtNjVlZjcyZDQtY2UyOGQ0ODJjNi00ZWY4ZDAifQ.j-w5jk5Ji-0vCkaxVaK8pDMIOhRsXmG7o6oZictoHYE">Huly&reg;:
<b>ENG-1057</b></a></sub>
This commit is contained in:
Prad Nukala
2024-10-10 13:44:17 -04:00
committed by GitHub
parent 0a16e41c78
commit 279ab6e5e3
189 changed files with 1515 additions and 1432 deletions
+84
View File
@@ -0,0 +1,84 @@
package handlers
import (
"encoding/json"
"fmt"
"github.com/go-webauthn/webauthn/protocol"
"github.com/labstack/echo/v4"
)
// ╭───────────────────────────────────────────────────────────╮
// │ Login Handlers │
// ╰───────────────────────────────────────────────────────────╯
func LoginSubjectStart(e echo.Context) error {
return e.JSON(200, "HandleCredentialAssertion")
}
func LoginSubjectCheck(e echo.Context) error {
return e.JSON(200, "HandleCredentialAssertion")
}
func LoginSubjectFinish(e echo.Context) error {
return e.JSON(200, "HandleCredentialAssertion")
}
// ╭───────────────────────────────────────────────────────────╮
// │ Register Handlers │
// ╰───────────────────────────────────────────────────────────╯
func RegisterSubjectCheck(e echo.Context) error {
credentialID := e.FormValue("credentialID")
return e.JSON(200, credentialID)
}
func RegisterSubjectStart(e echo.Context) error {
// Get the serialized credential data from the form
credentialDataJSON := e.FormValue("credentialData")
// Deserialize the JSON into a temporary struct
var ccr protocol.CredentialCreationResponse
err := json.Unmarshal([]byte(credentialDataJSON), &ccr)
if err != nil {
return e.JSON(500, err.Error())
}
//
// // Parse the CredentialCreationResponse
// parsedData, err := ccr.Parse()
// if err != nil {
// return e.JSON(500, err.Error())
// }
//
// // Create the Credential
// // credential := orm.NewCredential(parsedData, e.Request().Host, "")
//
// // Set additional fields
// credential.Controller = "" // Set this to the appropriate controller value
return e.JSON(200, fmt.Sprintf("REGISTER: %s", string(ccr.ID)))
}
func RegisterSubjectFinish(e echo.Context) error {
// Get the serialized credential data from the form
credentialDataJSON := e.FormValue("credentialData")
// Deserialize the JSON into a temporary struct
var ccr protocol.CredentialCreationResponse
err := json.Unmarshal([]byte(credentialDataJSON), &ccr)
if err != nil {
return e.JSON(500, err.Error())
}
//
// // Parse the CredentialCreationResponse
// parsedData, err := ccr.Parse()
// if err != nil {
// return e.JSON(500, err.Error())
// }
//
// // Create the Credential
// // credential := orm.NewCredential(parsedData, e.Request().Host, "")
//
// // Set additional fields
// credential.Controller = "" // Set this to the appropriate controller value
return e.JSON(200, fmt.Sprintf("REGISTER: %s", string(ccr.ID)))
}
+23
View File
@@ -0,0 +1,23 @@
package handlers
import (
"github.com/labstack/echo/v4"
)
func GrantAuthorization(e echo.Context) error {
// Implement authorization endpoint using passkey authentication
// Store session data in cache
return nil
}
func GetJWKS(e echo.Context) error {
// Implement token endpoint
// Use cached session data for validation
return nil
}
func GetToken(e echo.Context) error {
// Implement token endpoint
// Use cached session data for validation
return nil
}
+8
View File
@@ -0,0 +1,8 @@
package handlers
import "github.com/labstack/echo/v4"
func GetDatabaseSchema(e echo.Context) error {
// Implement database schema endpoint
return nil
}
+30
View File
@@ -0,0 +1,30 @@
package routes
import (
"github.com/labstack/echo/v4"
"github.com/onsonr/sonr/nebula/components/auth"
"github.com/onsonr/sonr/nebula/components/home"
"github.com/onsonr/sonr/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)
}
+17
View File
@@ -0,0 +1,17 @@
package routes
import (
"github.com/labstack/echo/v4"
"github.com/onsonr/sonr/nebula/components/auth"
"github.com/onsonr/sonr/nebula/components/home"
)
func RegisterProxyAPI(e *echo.Echo) {
}
func RegisterProxyViews(e *echo.Echo) {
e.GET("/", home.Route)
e.GET("/login", auth.LoginRoute)
e.GET("/register", auth.RegisterRoute)
}