@@ -12,39 +12,39 @@ import (
12
12
"github.com/sirupsen/logrus"
13
13
)
14
14
15
- func handleTransactionRollback (tx * sql.Tx , err error , context string ) {
15
+ func handleTransactionRollback (tx * sql.Tx , context string , err error ) {
16
16
txErr := tx .Rollback ()
17
17
if txErr != nil {
18
18
logrus .Errorf (RollbackErr , txErr )
19
19
}
20
20
logrus .Errorf (context , err )
21
21
}
22
22
23
- func writeResponse (w http.ResponseWriter , context , response string ) {
24
- _ , writeErr := w .Write ([]byte (response + "\n " ))
23
+ func writeError (w http.ResponseWriter , context , err string ) {
24
+ _ , writeErr := w .Write ([]byte (err + "\n " ))
25
25
if writeErr != nil {
26
26
logrus .Errorf (WritingResponseErr , writeErr )
27
27
}
28
- logrus .Errorf (context , response )
28
+ logrus .Errorf (context , err )
29
29
}
30
30
31
31
func readClaimFile (w http.ResponseWriter , r * http.Request ) []byte {
32
32
err := r .ParseMultipartForm (ParseLowerBound << ParseUpperBound )
33
33
if err != nil {
34
- writeResponse (w , RequestContentTypeErr , err .Error ())
34
+ writeError (w , RequestContentTypeErr , err .Error ())
35
35
return nil
36
36
}
37
37
38
38
claimFile , _ , err := r .FormFile (ClaimFileInputName )
39
39
if err != nil {
40
- writeResponse (w , FormFileErr , err .Error ())
40
+ writeError (w , FormFileErr , err .Error ())
41
41
return nil
42
42
}
43
43
defer claimFile .Close ()
44
44
45
45
claimFileBytes , err := io .ReadAll (claimFile )
46
46
if err != nil {
47
- writeResponse (w , ReadingFileErr , err .Error ())
47
+ writeError (w , ReadingFileErr , err .Error ())
48
48
return nil
49
49
}
50
50
@@ -61,13 +61,13 @@ func uploadAndConvertClaimFile(w http.ResponseWriter, r *http.Request) map[strin
61
61
var claimFileMap map [string ]interface {}
62
62
err := json .Unmarshal (claimFileBytes , & claimFileMap )
63
63
if err != nil {
64
- writeResponse (w , UnmarshalErr , err .Error ())
64
+ writeError (w , UnmarshalErr , err .Error ())
65
65
return nil
66
66
}
67
67
68
68
_ , keyExists := claimFileMap [ClaimTag ]
69
69
if ! keyExists {
70
- writeResponse (w , "%s" , ClaimFieldMissingErr )
70
+ writeError (w , MalformedClaimFileErr , ClaimFieldMissingErr )
71
71
return nil
72
72
}
73
73
return claimFileMap [ClaimTag ].(map [string ]interface {})
@@ -76,37 +76,36 @@ func uploadAndConvertClaimFile(w http.ResponseWriter, r *http.Request) map[strin
76
76
func validateClaimKeys (w http.ResponseWriter , claimFileMap map [string ]interface {}) map [string ]interface {} {
77
77
versions , keyExists := claimFileMap [VersionsTag ].(map [string ]interface {})
78
78
if ! keyExists {
79
- writeResponse (w , "%s" , VersionsFieldMissingErr )
79
+ writeError (w , MalformedClaimFileErr , VersionsFieldMissingErr )
80
80
return nil
81
81
}
82
82
83
83
_ , keyExists = versions ["ocp" ]
84
84
if ! keyExists {
85
- writeResponse (w , "%s" , OcpFieldMissingErr )
85
+ writeError (w , MalformedClaimFileErr , OcpFieldMissingErr )
86
86
return nil
87
87
}
88
88
89
89
return versions
90
90
}
91
91
92
- func insertToClaimTable (w http.ResponseWriter , r * http.Request , tx * sql.Tx , claimFileMap map [string ]interface {}) bool {
92
+ func insertToClaimTable (w http.ResponseWriter , r * http.Request , tx * sql.Tx , claimFileMap map [string ]interface {}, partnerName string ) bool {
93
93
versions := validateClaimKeys (w , claimFileMap )
94
94
if versions == nil {
95
95
return false
96
96
}
97
97
98
98
// saving users input referring to who executed claim file and partner's name
99
99
executedBy := r .FormValue (ExecutedByInputName )
100
- partnerName := r .FormValue (PartnerNameInputName )
101
100
102
101
if executedBy == "" {
103
- writeResponse (w , "%s" , ExecutedByMissingErr )
102
+ writeError (w , "%s" , ExecutedByMissingErr )
104
103
return false
105
104
}
106
105
107
106
_ , err := tx .Exec (InsertToClaimSQLCmd , versions ["ocp" ].(string ), executedBy , time .Now (), partnerName )
108
107
if err != nil {
109
- handleTransactionRollback (tx , err , ExecQueryErr )
108
+ handleTransactionRollback (tx , ExecQueryErr , err )
110
109
return false
111
110
}
112
111
return true
@@ -141,69 +140,83 @@ func validateInnerResultsKeys(results map[string]interface{}, testName string) (
141
140
func insertToClaimResultTable (w http.ResponseWriter , tx * sql.Tx , claimFileMap map [string ]interface {}) bool {
142
141
results , keyExists := claimFileMap [ResultsTag ].(map [string ]interface {})
143
142
if ! keyExists {
144
- writeResponse (w , "%s" , ResultsFieldMissingErr )
143
+ writeError (w , MalformedClaimFileErr , ResultsFieldMissingErr )
145
144
return false
146
145
}
147
146
148
147
var claimID string
149
148
err := tx .QueryRow (ExtractLastClaimID ).Scan (& claimID )
150
149
if err != nil {
151
- handleTransactionRollback (tx , err , ScanDBFieldErr )
150
+ handleTransactionRollback (tx , ScanDBFieldErr , err )
152
151
return false
153
152
}
154
153
155
154
for testName := range results {
156
155
testData , testID , keyErr := validateInnerResultsKeys (results , testName )
157
156
if keyErr != "" {
158
- writeResponse (w , "%s" , keyErr )
157
+ writeError (w , MalformedClaimFileErr , keyErr )
159
158
return false
160
159
}
161
160
_ , err = tx .Exec (InsertToClaimResSQLCmd , claimID , testID ["suite" ].(string ),
162
161
testID ["id" ].(string ), testData ["state" ].(string ))
163
162
if err != nil {
164
- handleTransactionRollback (tx , err , ExecQueryErr )
163
+ handleTransactionRollback (tx , ExecQueryErr , err )
165
164
return false
166
165
}
167
166
}
168
167
return true
169
168
}
170
169
171
- func parseClaimFile (w http.ResponseWriter , r * http.Request , tx * sql.Tx , claimFileMap map [string ]interface {}) bool {
170
+ func parseClaimFile (w http.ResponseWriter , r * http.Request , tx * sql.Tx , claimFileMap map [string ]interface {}, partnerName string ) bool {
172
171
_ , err := tx .Exec (UseCollectorSQLCmd )
173
172
if err != nil {
174
- handleTransactionRollback (tx , err , ExecQueryErr )
173
+ handleTransactionRollback (tx , ExecQueryErr , err )
175
174
return false
176
175
}
177
176
178
- if insertToClaimTable (w , r , tx , claimFileMap ) && insertToClaimResultTable (w , tx , claimFileMap ) {
177
+ if insertToClaimTable (w , r , tx , claimFileMap , partnerName ) && insertToClaimResultTable (w , tx , claimFileMap ) {
179
178
return true
180
179
}
181
180
return false
182
181
}
183
182
184
183
func ParserHandler (w http.ResponseWriter , r * http.Request , db * sql.DB ) {
185
- claimFileMap := uploadAndConvertClaimFile (w , r )
186
- if claimFileMap == nil {
187
- // error occurred while uploading\converting claim file.
188
- return
189
- }
190
184
// Beginning the transaction.
191
185
tx , err := db .Begin ()
192
186
if err != nil {
193
187
logrus .Errorf (BeginTxErr , err )
194
188
return
195
189
}
196
190
191
+ // Authonticate partner name and password
192
+ partnerName , err := authenticatePostRequest (r , tx )
193
+ if err != nil {
194
+ writeError (w , AuthError , err .Error ())
195
+ return
196
+ }
197
+
198
+ claimFileMap := uploadAndConvertClaimFile (w , r )
199
+ if claimFileMap == nil {
200
+ // error occurred while uploading\converting claim file.
201
+ return
202
+ }
203
+
197
204
// Check if an error occurred while parsing (which caused a Rollback).
198
- if ! parseClaimFile (w , r , tx , claimFileMap ) {
205
+ if ! parseClaimFile (w , r , tx , claimFileMap , partnerName ) {
199
206
return
200
207
}
201
208
202
209
// If no error occurred, commit the transaction to make database changes.
203
210
err = tx .Commit ()
204
211
if err != nil {
205
- handleTransactionRollback (tx , err , CommitTxErr )
212
+ handleTransactionRollback (tx , CommitTxErr , err )
206
213
return
207
214
}
208
- writeResponse (w , "%s" , SuccessUploadingFileMSG )
215
+
216
+ // Succfully uploaded file
217
+ _ , writeErr := w .Write ([]byte (SuccessUploadingFileMSG + "\n " ))
218
+ if writeErr != nil {
219
+ logrus .Errorf (WritingResponseErr , writeErr )
220
+ }
221
+ logrus .Info (SuccessUploadingFileMSG )
209
222
}
0 commit comments