53 lines
1.2 KiB
Go
53 lines
1.2 KiB
Go
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()
|
|
}
|