From a76c837c4f27d2c651a4e50c7df38c5199270786 Mon Sep 17 00:00:00 2001 From: Aryan Singh Date: Mon, 26 Aug 2024 19:01:21 +0530 Subject: [PATCH] Updates Admin Routes to latest Kratos --- api/admin.go | 548 +++++++++++++++--------------- pkg/wrapper/kratos/admin/admin.go | 134 ++++---- 2 files changed, 337 insertions(+), 345 deletions(-) diff --git a/api/admin.go b/api/admin.go index 7bbc134..4d41164 100644 --- a/api/admin.go +++ b/api/admin.go @@ -1,276 +1,276 @@ package api -// import ( -// "encoding/json" -// "fmt" -// "net/http" -// "os" -// "strconv" -// "strings" - -// "github.com/gin-gonic/gin" - -// "github.com/sdslabs/nymeria/log" -// "github.com/sdslabs/nymeria/pkg/wrapper/kratos/admin" -// ) - -// func HandleCreateIdentityFlow(c *gin.Context) { - -// var t admin.Identity - -// err := c.BindJSON(&t) - -// if err != nil { -// log.ErrorLogger("Unable to process JSON body", err) - -// errCode, _ := strconv.Atoi(strings.Split(err.Error(), " ")[0]) -// c.JSON(errCode, gin.H{ -// "error": err.Error(), -// "message": "Unable to process JSON body", -// }) -// return -// } - -// if err != nil { -// log.ErrorLogger("Unable to convert JSON to map", err) - -// errCode, _ := strconv.Atoi(strings.Split(err.Error(), " ")[0]) -// c.JSON(errCode, gin.H{ -// "error": err.Error(), -// "message": "Unable to convert JSON to map", -// }) -// return -// } - -// createdIdentity, r, err := admin.CreateIdentityFlowWrapper(t) - -// if err != nil { -// log.ErrorLogger("Error while calling `AdminCreateIdentity`", err) -// fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r) -// c.JSON(http.StatusInternalServerError, gin.H{ -// "error": "Internal server error", -// }) -// return -// } -// c.JSON(http.StatusOK, gin.H{ -// "identity": createdIdentity.Id, -// }) -// } - -// func HandleGetIdentityFlow(c *gin.Context) { -// createdIdentity := c.Query("identity") -// getIdentity, r, err := admin.GetIdentityFlowWrapper(createdIdentity) - -// if err != nil { -// log.ErrorLogger("Error while calling `AdminGetIdentity`", err) -// fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r) -// c.JSON(http.StatusInternalServerError, gin.H{ -// "error": "Internal server error", -// }) -// return -// } - -// jsonString, err := json.Marshal(getIdentity.Traits) - -// if err != nil { -// log.ErrorLogger("Unable to convert map to json", err) - -// errCode, _ := strconv.Atoi(strings.Split(err.Error(), " ")[0]) -// c.JSON(errCode, gin.H{ -// "error": err.Error(), -// "message": "Unable to convert map to json", -// }) -// return -// } - -// var identity admin.Identity - -// err = json.Unmarshal(jsonString, &identity) - -// if err != nil { -// log.ErrorLogger("Unable to convert JSON to map", err) - -// errCode, _ := strconv.Atoi(strings.Split(err.Error(), " ")[0]) -// c.JSON(errCode, gin.H{ -// "error": err.Error(), -// "message": "Unable to convert JSON to map", -// }) -// return -// } - -// fmt.Fprintf(os.Stdout, "Identity details for id %v. Traits: %v\n", createdIdentity, identity) -// c.JSON(http.StatusOK, gin.H{ -// "Identity": createdIdentity, -// "Traits": identity, -// }) -// } - -// func HandleDeleteIdentityFlow(c *gin.Context) { - -// var t IdentityBody -// err := c.BindJSON(&t) - -// if err != nil { -// log.ErrorLogger("Unable to process JSON body", err) - -// errCode, _ := strconv.Atoi(strings.Split(err.Error(), " ")[0]) -// c.JSON(errCode, gin.H{ -// "error": err.Error(), -// "message": "Unable to process JSON body", -// }) -// return -// } - -// r, err := admin.DeleteIdentityFlowWrapper(t.Identity) - -// if err != nil { -// log.ErrorLogger("Error while calling `AdminDeleteIdentity`", err) -// fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r) -// c.JSON(http.StatusInternalServerError, gin.H{ -// "error": "INternal server error", -// }) -// return -// } -// c.JSON(http.StatusOK, gin.H{ -// "message": "removed identity", -// }) -// } - -// func HandleListIdentity(c *gin.Context) { -// identities, r, err := admin.ListIdentityFlowWrapper() -// if err != nil { -// log.ErrorLogger("Error while calling `AdminListIdentities`", err) -// fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r) -// c.JSON(http.StatusInternalServerError, gin.H{ -// "error": "Internal server error", -// }) - -// return -// } -// c.JSON(http.StatusOK, gin.H{ -// "identities": identities, -// }) -// } - -// func HandleBanIdentity(c *gin.Context) { -// var t IdentityBody -// err := c.BindJSON(&t) - -// if err != nil { -// log.ErrorLogger("Unable to process JSON body", err) - -// errCode, _ := strconv.Atoi(strings.Split(err.Error(), " ")[0]) -// c.JSON(errCode, gin.H{ -// "error": err.Error(), -// "message": "Unable to process JSON body", -// }) -// return -// } - -// identityResult, r, err := admin.GetIdentityFlowWrapper(t.Identity) - -// if err != nil { -// log.ErrorLogger("Error while fetching Identity details", err) -// fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r) -// c.JSON(http.StatusInternalServerError, gin.H{ -// "error": "Internal server error", -// }) -// return -// } - -// id, r, err := admin.BanIdentityFlowWrapper(identityResult) - -// if err != nil { -// log.ErrorLogger("Error while calling `AdminPatchIdentities`", err) -// fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r) -// c.JSON(http.StatusInternalServerError, gin.H{ -// "error": err.Error(), -// }) -// return -// } -// c.JSON(http.StatusOK, gin.H{ -// "identity": id, -// }) -// } - -// func HandleRemoveBanIdentity(c *gin.Context) { -// var t IdentityBody -// err := c.BindJSON(&t) - -// if err != nil { -// log.ErrorLogger("Unable to process JSON body", err) - -// errCode, _ := strconv.Atoi(strings.Split(err.Error(), " ")[0]) -// c.JSON(errCode, gin.H{ -// "error": err.Error(), -// "message": "Unable to process JSON body", -// }) -// return -// } - -// identityResult, r, err := admin.GetIdentityFlowWrapper(t.Identity) - -// if err != nil { -// log.ErrorLogger("Error while fetching Identity details", err) -// fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r) -// c.JSON(http.StatusInternalServerError, gin.H{ -// "error": "Internal server error", -// }) -// return -// } - -// id, r, err := admin.RemoveBanIdentityFlowWrapper(identityResult) - -// if err != nil { -// log.ErrorLogger("Error while calling `AdminPatchIdentities`", err) -// fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r) -// c.JSON(http.StatusInternalServerError, gin.H{ -// "error": err.Error(), -// }) -// return -// } -// c.JSON(http.StatusOK, gin.H{ -// "identity": id, -// }) -// } - -// func HandleRoleSwitch(c *gin.Context) { -// var t IdentityBody -// err := c.BindJSON(&t) - -// if err != nil { -// log.ErrorLogger("Unable to process JSON body", err) - -// errCode, _ := strconv.Atoi(strings.Split(err.Error(), " ")[0]) -// c.JSON(errCode, gin.H{ -// "error": err.Error(), -// "message": "Unable to process JSON body", -// }) -// return -// } - -// identityResult, r, err := admin.GetIdentityFlowWrapper(t.Identity) - -// if err != nil { -// log.ErrorLogger("Error while fetching Identity details", err) -// fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r) -// c.JSON(http.StatusInternalServerError, gin.H{ -// "error": "Internal server error", -// }) -// return -// } - -// id, r, err := admin.RoleSwitchFlowWrapper(identityResult) - -// if err != nil { -// log.ErrorLogger("Error while calling `AdminPatchIdentities`", err) -// fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r) -// c.JSON(http.StatusInternalServerError, gin.H{ -// "error": err.Error(), -// }) -// return -// } -// c.JSON(http.StatusOK, gin.H{ -// "identity": id, -// }) -// } +import ( + "encoding/json" + "fmt" + "net/http" + "os" + "strconv" + "strings" + + "github.com/gin-gonic/gin" + + "github.com/sdslabs/nymeria/log" + "github.com/sdslabs/nymeria/pkg/wrapper/kratos/admin" +) + +func HandleCreateIdentityFlow(c *gin.Context) { + + var t admin.Identity + + err := c.BindJSON(&t) + + if err != nil { + log.ErrorLogger("Unable to process JSON body", err) + + errCode, _ := strconv.Atoi(strings.Split(err.Error(), " ")[0]) + c.JSON(errCode, gin.H{ + "error": err.Error(), + "message": "Unable to process JSON body", + }) + return + } + + if err != nil { + log.ErrorLogger("Unable to convert JSON to map", err) + + errCode, _ := strconv.Atoi(strings.Split(err.Error(), " ")[0]) + c.JSON(errCode, gin.H{ + "error": err.Error(), + "message": "Unable to convert JSON to map", + }) + return + } + + createdIdentity, r, err := admin.CreateIdentityFlowWrapper(t) + + if err != nil { + log.ErrorLogger("Error while calling `AdminCreateIdentity`", err) + fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r) + c.JSON(http.StatusInternalServerError, gin.H{ + "error": "Internal server error", + }) + return + } + c.JSON(http.StatusOK, gin.H{ + "identity": createdIdentity.Id, + }) +} + +func HandleGetIdentityFlow(c *gin.Context) { + createdIdentity := c.Query("identity") + getIdentity, r, err := admin.GetIdentityFlowWrapper(createdIdentity) + + if err != nil { + log.ErrorLogger("Error while calling `AdminGetIdentity`", err) + fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r) + c.JSON(http.StatusInternalServerError, gin.H{ + "error": "Internal server error", + }) + return + } + + jsonString, err := json.Marshal(getIdentity.Traits) + + if err != nil { + log.ErrorLogger("Unable to convert map to json", err) + + errCode, _ := strconv.Atoi(strings.Split(err.Error(), " ")[0]) + c.JSON(errCode, gin.H{ + "error": err.Error(), + "message": "Unable to convert map to json", + }) + return + } + + var identity admin.Identity + + err = json.Unmarshal(jsonString, &identity) + + if err != nil { + log.ErrorLogger("Unable to convert JSON to map", err) + + errCode, _ := strconv.Atoi(strings.Split(err.Error(), " ")[0]) + c.JSON(errCode, gin.H{ + "error": err.Error(), + "message": "Unable to convert JSON to map", + }) + return + } + + fmt.Fprintf(os.Stdout, "Identity details for id %v. Traits: %v\n", createdIdentity, identity) + c.JSON(http.StatusOK, gin.H{ + "Identity": createdIdentity, + "Traits": identity, + }) +} + +func HandleDeleteIdentityFlow(c *gin.Context) { + + var t IdentityBody + err := c.BindJSON(&t) + + if err != nil { + log.ErrorLogger("Unable to process JSON body", err) + + errCode, _ := strconv.Atoi(strings.Split(err.Error(), " ")[0]) + c.JSON(errCode, gin.H{ + "error": err.Error(), + "message": "Unable to process JSON body", + }) + return + } + + r, err := admin.DeleteIdentityFlowWrapper(t.Identity) + + if err != nil { + log.ErrorLogger("Error while calling `AdminDeleteIdentity`", err) + fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r) + c.JSON(http.StatusInternalServerError, gin.H{ + "error": "INternal server error", + }) + return + } + c.JSON(http.StatusOK, gin.H{ + "message": "removed identity", + }) +} + +func HandleListIdentity(c *gin.Context) { + identities, r, err := admin.ListIdentityFlowWrapper() + if err != nil { + log.ErrorLogger("Error while calling `AdminListIdentities`", err) + fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r) + c.JSON(http.StatusInternalServerError, gin.H{ + "error": "Internal server error", + }) + + return + } + c.JSON(http.StatusOK, gin.H{ + "identities": identities, + }) +} + +func HandleBanIdentity(c *gin.Context) { + var t IdentityBody + err := c.BindJSON(&t) + + if err != nil { + log.ErrorLogger("Unable to process JSON body", err) + + errCode, _ := strconv.Atoi(strings.Split(err.Error(), " ")[0]) + c.JSON(errCode, gin.H{ + "error": err.Error(), + "message": "Unable to process JSON body", + }) + return + } + + identityResult, r, err := admin.GetIdentityFlowWrapper(t.Identity) + + if err != nil { + log.ErrorLogger("Error while fetching Identity details", err) + fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r) + c.JSON(http.StatusInternalServerError, gin.H{ + "error": "Internal server error", + }) + return + } + + id, r, err := admin.BanIdentityFlowWrapper(identityResult) + + if err != nil { + log.ErrorLogger("Error while calling `AdminPatchIdentities`", err) + fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r) + c.JSON(http.StatusInternalServerError, gin.H{ + "error": err.Error(), + }) + return + } + c.JSON(http.StatusOK, gin.H{ + "identity": id, + }) +} + +func HandleRemoveBanIdentity(c *gin.Context) { + var t IdentityBody + err := c.BindJSON(&t) + + if err != nil { + log.ErrorLogger("Unable to process JSON body", err) + + errCode, _ := strconv.Atoi(strings.Split(err.Error(), " ")[0]) + c.JSON(errCode, gin.H{ + "error": err.Error(), + "message": "Unable to process JSON body", + }) + return + } + + identityResult, r, err := admin.GetIdentityFlowWrapper(t.Identity) + + if err != nil { + log.ErrorLogger("Error while fetching Identity details", err) + fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r) + c.JSON(http.StatusInternalServerError, gin.H{ + "error": "Internal server error", + }) + return + } + + id, r, err := admin.RemoveBanIdentityFlowWrapper(identityResult) + + if err != nil { + log.ErrorLogger("Error while calling `AdminPatchIdentities`", err) + fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r) + c.JSON(http.StatusInternalServerError, gin.H{ + "error": err.Error(), + }) + return + } + c.JSON(http.StatusOK, gin.H{ + "identity": id, + }) +} + +func HandleRoleSwitch(c *gin.Context) { + var t IdentityBody + err := c.BindJSON(&t) + + if err != nil { + log.ErrorLogger("Unable to process JSON body", err) + + errCode, _ := strconv.Atoi(strings.Split(err.Error(), " ")[0]) + c.JSON(errCode, gin.H{ + "error": err.Error(), + "message": "Unable to process JSON body", + }) + return + } + + identityResult, r, err := admin.GetIdentityFlowWrapper(t.Identity) + + if err != nil { + log.ErrorLogger("Error while fetching Identity details", err) + fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r) + c.JSON(http.StatusInternalServerError, gin.H{ + "error": "Internal server error", + }) + return + } + + id, r, err := admin.RoleSwitchFlowWrapper(identityResult) + + if err != nil { + log.ErrorLogger("Error while calling `AdminPatchIdentities`", err) + fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r) + c.JSON(http.StatusInternalServerError, gin.H{ + "error": err.Error(), + }) + return + } + c.JSON(http.StatusOK, gin.H{ + "identity": id, + }) +} diff --git a/pkg/wrapper/kratos/admin/admin.go b/pkg/wrapper/kratos/admin/admin.go index c93b6d2..140cd4a 100644 --- a/pkg/wrapper/kratos/admin/admin.go +++ b/pkg/wrapper/kratos/admin/admin.go @@ -1,103 +1,95 @@ package admin -// import ( -// "context" -// "net/http" +import ( + "context" + "net/http" -// client "github.com/ory/client-go" + client "github.com/ory/client-go" -// "github.com/sdslabs/nymeria/config" -// "github.com/sdslabs/nymeria/pkg/middleware" -// ) + "github.com/sdslabs/nymeria/config" + "github.com/sdslabs/nymeria/pkg/middleware" +) -// func CreateIdentityFlowWrapper(data Identity) (*client.Identity, *http.Response, error) { -// timeStamp := middleware.CurrentTimeStamp() +func CreateIdentityFlowWrapper(data Identity) (*client.Identity, *http.Response, error) { + timeStamp := middleware.CurrentTimeStamp() -// trait := map[string]interface{}{ -// "email": data.Email, -// "name": data.Name, -// "phone_number": data.PhoneNumber, -// "img_url": data.ImgURL, -// "invite_status": "pending", -// "role": data.Role, -// "created_at": timeStamp, -// "totp_enabled": false, -// } + trait := map[string]interface{}{ + "email": data.Email, + "name": data.Name, + "phone_number": data.PhoneNumber, + "img_url": data.ImgURL, + "invite_status": "pending", + "role": data.Role, + "created_at": timeStamp, + "totp_enabled": false, + } -// adminCreateIdentityBody := *client.NewAdminCreateIdentityBody("default", trait) // AdminCreateIdentityBody | (optional) + adminCreateIdentityBody := *client.NewCreateIdentityBody("default", trait) // AdminCreateIdentityBody | (optional) -// apiClient := client.NewAPIClient(config.KratosClientConfigAdmin) -// createdIdentity, r, err := apiClient.V0alpha2Api.AdminCreateIdentity(context.Background()).AdminCreateIdentityBody(adminCreateIdentityBody).Execute() + apiClient := client.NewAPIClient(config.KratosClientConfigAdmin) + createdIdentity, r, err := apiClient.IdentityAPI.CreateIdentity(context.Background()).CreateIdentityBody(adminCreateIdentityBody).Execute() -// return createdIdentity, r, err -// } + return createdIdentity, r, err +} -// func GetIdentityFlowWrapper(createdIdentity string) (*client.Identity, *http.Response, error) { -// apiClient := client.NewAPIClient(config.KratosClientConfigAdmin) +func GetIdentityFlowWrapper(createdIdentity string) (*client.Identity, *http.Response, error) { + apiClient := client.NewAPIClient(config.KratosClientConfigAdmin) -// getIdentity, r, err := apiClient.V0alpha2Api.AdminGetIdentity(context.Background(), createdIdentity).Execute() + getIdentity, r, err := apiClient.IdentityAPI.GetIdentity(context.Background(), createdIdentity).Execute() -// return getIdentity, r, err -// } + return getIdentity, r, err +} -// func DeleteIdentityFlowWrapper(identity string) (*http.Response, error) { -// apiClient := client.NewAPIClient(config.KratosClientConfigAdmin) +func DeleteIdentityFlowWrapper(identity string) (*http.Response, error) { + apiClient := client.NewAPIClient(config.KratosClientConfigAdmin) -// r, err := apiClient.V0alpha2Api.AdminDeleteIdentity(context.Background(), identity).Execute() + r, err := apiClient.IdentityAPI.DeleteIdentity(context.Background(), identity).Execute() -// return r, err -// } + return r, err +} -// func ListIdentityFlowWrapper() ([]client.Identity, *http.Response, error) { -// apiClient := client.NewAPIClient(config.KratosClientConfigAdmin) +func ListIdentityFlowWrapper() ([]client.Identity, *http.Response, error) { + apiClient := client.NewAPIClient(config.KratosClientConfigAdmin) -// identities, r, err := apiClient.V0alpha2Api.AdminListIdentities(context.Background()).Execute() + identities, r, err := apiClient.IdentityAPI.ListIdentities(context.Background()).Execute() -// return identities, r, err + return identities, r, err -// } +} -// func BanIdentityFlowWrapper(identity *client.Identity) (*client.Identity, *http.Response, error) { -// newState, err := client.NewIdentityStateFromValue("inactive") -// if err != nil { -// return nil, nil, err -// } +func BanIdentityFlowWrapper(identity *client.Identity) (*client.Identity, *http.Response, error) { -// submitDataBody := *client.NewAdminUpdateIdentityBody(identity.SchemaId, *newState, identity.Traits.(map[string]interface{})) + submitDataBody := *client.NewUpdateIdentityBody(identity.SchemaId, "inactive", identity.Traits.(map[string]interface{})) -// apiClient := client.NewAPIClient(config.KratosClientConfigAdmin) -// id, r, err := apiClient.V0alpha2Api.AdminUpdateIdentity(context.Background(), identity.Id).AdminUpdateIdentityBody(submitDataBody).Execute() + apiClient := client.NewAPIClient(config.KratosClientConfigAdmin) + id, r, err := apiClient.IdentityAPI.UpdateIdentity(context.Background(), identity.Id).UpdateIdentityBody(submitDataBody).Execute() -// return id, r, err -// } + return id, r, err +} -// func RemoveBanIdentityFlowWrapper(identity *client.Identity) (*client.Identity, *http.Response, error) { -// newState, err := client.NewIdentityStateFromValue("active") -// if err != nil { -// return nil, nil, err -// } +func RemoveBanIdentityFlowWrapper(identity *client.Identity) (*client.Identity, *http.Response, error) { -// submitDataBody := *client.NewAdminUpdateIdentityBody(identity.SchemaId, *newState, identity.Traits.(map[string]interface{})) + submitDataBody := *client.NewUpdateIdentityBody(identity.SchemaId, "active", identity.Traits.(map[string]interface{})) -// apiClient := client.NewAPIClient(config.KratosClientConfigAdmin) -// id, r, err := apiClient.V0alpha2Api.AdminUpdateIdentity(context.Background(), identity.Id).AdminUpdateIdentityBody(submitDataBody).Execute() + apiClient := client.NewAPIClient(config.KratosClientConfigAdmin) + id, r, err := apiClient.IdentityAPI.UpdateIdentity(context.Background(), identity.Id).UpdateIdentityBody(submitDataBody).Execute() -// return id, r, err -// } + return id, r, err +} -// func RoleSwitchFlowWrapper(identity *client.Identity) (*client.Identity, *http.Response, error) { -// traits := identity.GetTraits().(map[string]interface{}) +func RoleSwitchFlowWrapper(identity *client.Identity) (*client.Identity, *http.Response, error) { + traits := identity.GetTraits().(map[string]interface{}) -// if traits["role"] == "user" { -// traits["role"] = "admin" -// } else if traits["role"] == "admin" { -// traits["role"] = "user" -// } + if traits["role"] == "user" { + traits["role"] = "admin" + } else if traits["role"] == "admin" { + traits["role"] = "user" + } -// submitDataBody := *client.NewAdminUpdateIdentityBody(identity.SchemaId, *identity.State, traits) + submitDataBody := *client.NewUpdateIdentityBody(identity.SchemaId, *identity.State, traits) -// apiClient := client.NewAPIClient(config.KratosClientConfigAdmin) -// id, r, err := apiClient.V0alpha2Api.AdminUpdateIdentity(context.Background(), identity.Id).AdminUpdateIdentityBody(submitDataBody).Execute() + apiClient := client.NewAPIClient(config.KratosClientConfigAdmin) + id, r, err := apiClient.IdentityAPI.UpdateIdentity(context.Background(), identity.Id).UpdateIdentityBody(submitDataBody).Execute() -// return id, r, err -// } + return id, r, err +}