package controllers import ( "encoding/json" "log" "oc-auth/models" "strings" beego "github.com/beego/beego/v2/server/web" "github.com/nats-io/nats.go" ) // Operations about auth type RegistrationController struct { beego.Controller } // @Title Create // @Description create auths // @Param body body models.Application true "The app info" // @Success 200 {string} models.auth.Id // @Failure 403 body is empty // @router / [post] func (o *RegistrationController) Post() { var app models.Application // Store the app info in the nats server err := json.Unmarshal(o.Ctx.Input.RequestBody, &app) if err != nil { log.Fatal(err) } servers := []string{"nats://127.0.0.1:1222", "nats://127.0.0.1:1223", "nats://127.0.0.1:1224"} nc, err := nats.Connect(strings.Join(servers, ",")) if err != nil { log.Fatal(err) } defer nc.Close() js, err := nc.JetStream(nats.PublishAsyncMaxPending(256)) if err != nil { log.Fatal(err) } kv, err := js.KeyValue("auth") if err != nil { log.Fatal(err) } kv.Put(app.ClientId, o.Ctx.Input.RequestBody) // register to OIDC server // store and return Id or post with UUID o.Data["json"] = map[string]string{"Id": "?"} o.ServeJSON() }