Browse Source

Support array params in web server API requests

Rod Hynes 9 years ago
parent
commit
26750e5dac
1 changed files with 21 additions and 1 deletions
  1. 21 1
      psiphon/server/webServer.go

+ 21 - 1
psiphon/server/webServer.go

@@ -155,8 +155,28 @@ func convertHTTPRequestToAPIRequest(
 
 	for name, values := range r.URL.Query() {
 		for _, value := range values {
-			params[name] = value
 			// Note: multiple values per name are ignored
+
+			isArray := false
+			for _, paramSpec := range baseRequestParams {
+				if paramSpec.name == name {
+					isArray = (paramSpec.flags&requestParamArray != 0)
+					break
+				}
+			}
+
+			if isArray {
+				// Special case: a JSON encoded array
+				var arrayValue []interface{}
+				err := json.Unmarshal([]byte(value), &arrayValue)
+				if err != nil {
+					return nil, psiphon.ContextError(err)
+				}
+				params[name] = arrayValue
+			} else {
+				// All other query parameters are simple strings
+				params[name] = value
+			}
 			break
 		}
 	}