Exemplo n.º 1
0
func getObjectRequest(r *http.Request, objectRequest *messaging.ObjectRequest, params martini.Params) (message string, isSuccess bool) {

	missingFields := ""
	isSuccess = true

	headerToken := r.Header.Get("securityToken")
	sendMetaData := r.Header.Get("sendMetaData")
	headerLog := r.Header.Get("log")

	var headerOperation string
	headerMultipliciry := r.Header.Get("multiplicity")

	headerNamespace := params["namespace"]
	headerClass := params["class"]

	headerId := params["id"]
	headerKeyword := r.URL.Query().Get("keyword")

	//check if <Skip> and <Take> are specified
	//If so store them in ObjectRequest <Extras>

	if r.URL.Query().Get("skip") != "" {
		objectRequest.Extras["skip"] = r.URL.Query().Get("skip")
	}

	if r.URL.Query().Get("take") != "" {
		objectRequest.Extras["take"] = r.URL.Query().Get("take")
	}

	if r.URL.Query().Get("fieldName") != "" {
		objectRequest.Extras["fieldName"] = r.URL.Query().Get("fieldName")
	}

	if len(headerToken) == 0 {
		isSuccess = false
		missingFields = missingFields + "securityToken"
	}

	if len(headerLog) != 0 {
		objectRequest.IsLogEnabled = true
		var initialSlice []string
		initialSlice = make([]string, 0)
		objectRequest.MessageStack = initialSlice
	} else {
		objectRequest.IsLogEnabled = false
	}

	var requestBody messaging.RequestBody

	if isSuccess {

		//isTokenValid, _ := validateSecurityToken(headerToken, headerNamespace)
		isTokenValid := true

		if isTokenValid {

			if r.Method != "GET" {
				rb, rerr := ioutil.ReadAll(r.Body)

				if rerr != nil {
					message = "Error converting request : " + rerr.Error()
					isSuccess = false
				} else {

					err := json.Unmarshal(rb, &requestBody)
					if err != nil {
						message = "JSON Parse error in Request : " + err.Error()
						isSuccess = false
					} else {
						objectRequest.Body = requestBody
					}
				}
			}

			if isSuccess {

				canAddHeader := true
				switch r.Method {
				case "GET": //read keyword, and unique key
					if len(headerId) != 0 {
						headerOperation = "read-key"
					} else if len(headerKeyword) != 0 {
						objectRequest.Body = messaging.RequestBody{}
						objectRequest.Body.Query = messaging.Query{Parameters: headerKeyword}
						headerOperation = "read-keyword"
					} else if len(headerNamespace) != 0 && len(headerClass) != 0 {
						headerOperation = "read-all"
					}
					canAddHeader = false
				case "POST": //read query, read special, insert
					if len(requestBody.Object) != 0 || len(requestBody.Objects) != 0 {
						fmt.Println("Insert by POST : " + objectRequest.Body.Parameters.KeyProperty)
						headerOperation = "insert"
						if len(objectRequest.Body.Object) != 0 {
							headerId = objectRequest.Body.Object[objectRequest.Body.Parameters.KeyProperty].(string)
						}
					} else if requestBody.Query.Type != "" && requestBody.Query.Type != " " {
						fmt.Println("Query Function Identified!")
						headerOperation = "read-filter"
						canAddHeader = false
					} else if requestBody.Special.Type != "" && requestBody.Special.Type != " " {
						fmt.Println("Special Function Identified!")
						headerOperation = "special"
						canAddHeader = false
					}

				case "PUT": //update
					if len(objectRequest.Body.Objects) != 0 {
						headerOperation = "update"
					} else {
						headerId = objectRequest.Body.Object[objectRequest.Body.Parameters.KeyProperty].(string)
						headerOperation = "update"
					}

				case "DELETE": //delete
					if len(objectRequest.Body.Objects) != 0 {
						headerOperation = "delete"
					} else {
						headerId = objectRequest.Body.Object[objectRequest.Body.Parameters.KeyProperty].(string)
						headerOperation = "delete"
					}
				}

				if len(objectRequest.Body.Objects) != 0 {
					headerMultipliciry = "multiple"
				} else if len(objectRequest.Body.Object) != 0 {
					headerMultipliciry = "single"
				}

				objectRequest.Controls = messaging.RequestControls{SecurityToken: headerToken, SendMetaData: sendMetaData, Namespace: headerNamespace, Class: headerClass, Multiplicity: headerMultipliciry, Id: headerId, Operation: headerOperation}

				configObject := configuration.ConfigurationManager{}.Get(headerToken, headerNamespace, headerClass)
				objectRequest.Configuration = configObject

				if canAddHeader {
					//This was changed on 2015-08-04
					//From now on headers will be added in repositories.RepositoryExecutor.go
					//Why this wasn't removed then? Without this note you could have deleted this.
					//SAVING IT FOR A RAINY DAY! Stop questioning the dev!
					repositories.FillControlHeaders(objectRequest)
				}
			}
		} else {
			isSuccess = false
			message = "Access token not validated." + missingFields
		}
	} else {
		message = "Missing attributes in request header : " + missingFields
	}
	return
}