2014-05-05 21:08:01 +04:00
// Copyright 2014 The Gogs Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package apiv1
import (
"reflect"
2014-07-26 08:24:27 +04:00
"github.com/Unknwon/macaron"
"github.com/macaron-contrib/i18n"
2014-05-05 21:08:01 +04:00
"github.com/gogits/gogs/modules/auth"
"github.com/gogits/gogs/modules/log"
"github.com/gogits/gogs/modules/middleware/binding"
)
type MarkdownForm struct {
Text string ` form:"text" binding:"Required" `
Mode string ` form:"mode" `
Context string ` form:"context" `
}
2014-07-26 08:24:27 +04:00
func ( f * MarkdownForm ) Validate ( ctx * macaron . Context , errs * binding . Errors , l i18n . Locale ) {
validateApiReq ( errs , ctx . Data , f , l )
2014-05-05 21:08:01 +04:00
}
2014-07-26 08:24:27 +04:00
func validateApiReq ( errs * binding . Errors , data map [ string ] interface { } , f interface { } , l i18n . Locale ) {
2014-05-05 21:08:01 +04:00
if errs . Count ( ) == 0 {
return
} else if len ( errs . Overall ) > 0 {
for _ , err := range errs . Overall {
2014-07-26 08:24:27 +04:00
log . Error ( 4 , "%s: %v" , reflect . TypeOf ( f ) , err )
2014-05-05 21:08:01 +04:00
}
return
}
data [ "HasError" ] = true
typ := reflect . TypeOf ( f )
val := reflect . ValueOf ( f )
if typ . Kind ( ) == reflect . Ptr {
typ = typ . Elem ( )
val = val . Elem ( )
}
for i := 0 ; i < typ . NumField ( ) ; i ++ {
field := typ . Field ( i )
fieldName := field . Tag . Get ( "form" )
// Allow ignored fields in the struct
if fieldName == "-" {
continue
}
if err , ok := errs . Fields [ field . Name ] ; ok {
switch err {
case binding . BindingRequireError :
2014-05-06 00:21:43 +04:00
data [ "ErrorMsg" ] = fieldName + " cannot be empty"
2014-05-05 21:08:01 +04:00
case binding . BindingAlphaDashError :
2014-05-06 00:21:43 +04:00
data [ "ErrorMsg" ] = fieldName + " must be valid alpha or numeric or dash(-_) characters"
2014-05-05 21:08:01 +04:00
case binding . BindingAlphaDashDotError :
2014-05-06 00:21:43 +04:00
data [ "ErrorMsg" ] = fieldName + " must be valid alpha or numeric or dash(-_) or dot characters"
2014-05-05 21:08:01 +04:00
case binding . BindingMinSizeError :
2014-05-06 00:21:43 +04:00
data [ "ErrorMsg" ] = fieldName + " must contain at least " + auth . GetMinMaxSize ( field ) + " characters"
2014-05-05 21:08:01 +04:00
case binding . BindingMaxSizeError :
2014-05-06 00:21:43 +04:00
data [ "ErrorMsg" ] = fieldName + " must contain at most " + auth . GetMinMaxSize ( field ) + " characters"
2014-05-05 21:08:01 +04:00
case binding . BindingEmailError :
2014-05-06 00:21:43 +04:00
data [ "ErrorMsg" ] = fieldName + " is not a valid e-mail address"
2014-05-05 21:08:01 +04:00
case binding . BindingUrlError :
2014-05-06 00:21:43 +04:00
data [ "ErrorMsg" ] = fieldName + " is not a valid URL"
2014-05-05 21:08:01 +04:00
default :
data [ "ErrorMsg" ] = "Unknown error: " + err
}
return
}
}
}