|
| 1 | +package application |
| 2 | + |
| 3 | +import ( |
| 4 | + "encoding/json" |
| 5 | + "errors" |
| 6 | + "net/http" |
| 7 | + |
| 8 | + "github.com/factly/kavach-server/model" |
| 9 | + "github.com/factly/x/errorx" |
| 10 | + "github.com/factly/x/loggerx" |
| 11 | + "github.com/factly/x/renderx" |
| 12 | + "github.com/factly/x/validationx" |
| 13 | + "gorm.io/gorm" |
| 14 | +) |
| 15 | + |
| 16 | +// validationBody request body |
| 17 | +type validationBody struct { |
| 18 | + Token string `json:"token" validate:"required"` |
| 19 | +} |
| 20 | + |
| 21 | +// Validate - validate_token application token |
| 22 | +// @Summary Show a application token |
| 23 | +// @Description validate_token application token |
| 24 | +// @Tags OrganisationApplicationsTokens |
| 25 | +// @ID validate_token-organisation-application-token |
| 26 | +// @Produce json |
| 27 | +// @Param X-Organisation header string true "Organisation ID" |
| 28 | +// @Param application_slug path string true "Application Slug" |
| 29 | +// @Param ValidationBody body ValidationBody true "Validation Body" |
| 30 | +// @Success 200 {object} model.Application |
| 31 | +// @Router /applications/{application_id}/tokens/validate_token [post] |
| 32 | +func validate_token(w http.ResponseWriter, r *http.Request) { |
| 33 | + //parse applicaion_id |
| 34 | + |
| 35 | + tokenBody := validationBody{} |
| 36 | + err := json.NewDecoder(r.Body).Decode(&tokenBody) |
| 37 | + if err != nil { |
| 38 | + loggerx.Error(err) |
| 39 | + errorx.Render(w, errorx.Parser(errorx.DecodeError())) |
| 40 | + return |
| 41 | + } |
| 42 | + |
| 43 | + validationError := validationx.Check(tokenBody) |
| 44 | + if validationError != nil { |
| 45 | + loggerx.Error(errors.New("validation error")) |
| 46 | + errorx.Render(w, validationError) |
| 47 | + return |
| 48 | + } |
| 49 | + |
| 50 | + appToken := model.ApplicationToken{} |
| 51 | + // Fetch all tokens for a application |
| 52 | + // to need to specify the organisation id as token itself is unique |
| 53 | + err = model.DB.Model(&model.ApplicationToken{}).Where(&model.ApplicationToken{ |
| 54 | + Token: tokenBody.Token, |
| 55 | + }).First(&appToken).Error |
| 56 | + |
| 57 | + if err != nil { |
| 58 | + loggerx.Error(err) |
| 59 | + if err == gorm.ErrRecordNotFound { |
| 60 | + renderx.JSON(w, http.StatusUnauthorized, map[string]interface{}{"valid": false}) |
| 61 | + return |
| 62 | + } |
| 63 | + errorx.Render(w, errorx.Parser(errorx.InternalServerError())) |
| 64 | + return |
| 65 | + } |
| 66 | + |
| 67 | + renderx.JSON(w, http.StatusOK, map[string]interface{}{"valid": true}) |
| 68 | +} |
0 commit comments