update broker to use logger service
This commit is contained in:
		| @ -11,6 +11,7 @@ import ( | ||||
| type RequestPayload struct { | ||||
| 	Action string      `string:"action"` | ||||
| 	Auth   AuthPayload `json:"auth,omitempty"` | ||||
| 	Log    LogPayload  `json:"log,omitempty"` | ||||
| } | ||||
|  | ||||
| type AuthPayload struct { | ||||
| @ -18,6 +19,11 @@ type AuthPayload struct { | ||||
| 	Password string `json:"password"` | ||||
| } | ||||
|  | ||||
| type LogPayload struct { | ||||
| 	Name string `json:"name"` | ||||
| 	Data string `json:"data"` | ||||
| } | ||||
|  | ||||
| func (app *Config) Broker(w http.ResponseWriter, r *http.Request) { | ||||
| 	payload := jsonResponse{ | ||||
| 		Error:   false, | ||||
| @ -39,14 +45,54 @@ func (app *Config) HandleSubmission(w http.ResponseWriter, r *http.Request) { | ||||
| 	switch requestPayload.Action { | ||||
| 	case "auth": | ||||
| 		app.authenticate(w, requestPayload.Auth) | ||||
| 	case "log": | ||||
| 		app.LogItem(w, requestPayload.Log) | ||||
| 	default: | ||||
| 		app.errorJSON(w, errors.New("unknown action")) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (app *Config) authenticate(w http.ResponseWriter, a AuthPayload) { | ||||
| 	// create some json we'll send to the auth microservice | ||||
| 	authPayload, err := json.MarshalIndent(a, "", "\t") | ||||
| 	authService := Microservice{ | ||||
| 		Input: a, | ||||
| 		Addr:  "http://authentication-service/authenticate", | ||||
| 		ErrCode: statusError{ | ||||
| 			Code: http.StatusUnauthorized, | ||||
| 			Err:  errors.New("invalid credentials"), | ||||
| 		}, | ||||
| 		SuccessMsg: "Authenticated", | ||||
| 	} | ||||
| 	app.callService(w, authService) | ||||
| } | ||||
|  | ||||
| func (app *Config) LogItem(w http.ResponseWriter, entry LogPayload) { | ||||
| 	loggerService := Microservice{ | ||||
| 		Input: entry, | ||||
| 		Addr:  "http://logger-service/log", | ||||
| 		ErrCode: statusError{ | ||||
| 			Code: http.StatusInternalServerError, | ||||
| 			Err:  errors.New("internal error"), | ||||
| 		}, | ||||
| 		SuccessMsg: "Logged!", | ||||
| 	} | ||||
| 	app.callService(w, loggerService) | ||||
| } | ||||
|  | ||||
| type statusError struct { | ||||
| 	Code int | ||||
| 	Err  error | ||||
| } | ||||
|  | ||||
| type Microservice struct { | ||||
| 	Input      any | ||||
| 	Addr       string | ||||
| 	ErrCode    statusError | ||||
| 	SuccessMsg string | ||||
| } | ||||
|  | ||||
| func (app *Config) callService(w http.ResponseWriter, ms Microservice) { | ||||
| 	// create some json we'll send to the microservice | ||||
| 	inputPayload, err := json.MarshalIndent(ms.Input, "", "\t") | ||||
| 	if err != nil { | ||||
| 		app.errorJSON(w, err, http.StatusBadRequest) | ||||
| 		return | ||||
| @ -55,8 +101,8 @@ func (app *Config) authenticate(w http.ResponseWriter, a AuthPayload) { | ||||
| 	// call the service | ||||
| 	req, err := http.NewRequest( | ||||
| 		"POST", | ||||
| 		"http://authentication-service/authenticate", | ||||
| 		bytes.NewBuffer(authPayload), | ||||
| 		ms.Addr, | ||||
| 		bytes.NewBuffer(inputPayload), | ||||
| 	) | ||||
| 	if err != nil { | ||||
| 		app.errorJSON(w, err, http.StatusBadRequest) | ||||
| @ -75,7 +121,7 @@ func (app *Config) authenticate(w http.ResponseWriter, a AuthPayload) { | ||||
|  | ||||
| 	// make sure we get back the correct status code | ||||
| 	if resp.StatusCode != http.StatusAccepted { | ||||
| 		app.errorJSON(w, errors.New("invalid credentials")) | ||||
| 		app.errorJSON(w, ms.ErrCode.Err, ms.ErrCode.Code) | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| @ -89,13 +135,13 @@ func (app *Config) authenticate(w http.ResponseWriter, a AuthPayload) { | ||||
| 	} | ||||
|  | ||||
| 	if respPayload.Error { | ||||
| 		app.errorJSON(w, errors.New(respPayload.Message), http.StatusUnauthorized) | ||||
| 		app.errorJSON(w, errors.New(respPayload.Message)) | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	var payload jsonResponse | ||||
| 	payload.Error = false | ||||
| 	payload.Message = "Authenticated!" | ||||
| 	payload.Message = ms.SuccessMsg | ||||
| 	payload.Data = respPayload.Data | ||||
|  | ||||
| 	app.writeJSON(w, http.StatusOK, payload) | ||||
|  | ||||
		Reference in New Issue
	
	Block a user