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()
							 | 
						||
| 
								 | 
							
								}
							 |