func (v *Validation) apply(chk Validator, obj interface{}) *ValidationResult { if chk.IsSatisfied(obj) { return &ValidationResult{Ok: true} } // Get the default key. var key string if pc, _, line, ok := runtime.Caller(2); ok { f := runtime.FuncForPC(pc) if defaultKeys, ok := DefaultValidationKeys[f.Name()]; ok { key = defaultKeys[line] } } else { glog.Info("Failed to get Caller information to look up Validation key") } // Add the error to the validation context. err := &ValidationError{ Message: chk.DefaultMessage(), Key: key, } v.Errors = append(v.Errors, err) // Also return it in the result. return &ValidationResult{ Ok: false, Error: err, } }
// Returns a Session pulled from signed cookie. func getSessionFromCookie(cookie *http.Cookie) Session { session := make(Session) // Separate the data from the signature. hyphen := strings.Index(cookie.Value, "-") if hyphen == -1 || hyphen >= len(cookie.Value)-1 { return session } sig, data := cookie.Value[:hyphen], cookie.Value[hyphen+1:] // Verify the signature. if Sign(data) != sig { glog.Info("Session cookie signature failed") return session } ParseKeyValueCookie(data, func(key, val string) { session[key] = val }) if sessionTimeoutExpiredOrMissing(session) { session = make(Session) } return session }
func addModule(name, importPath, modulePath string) { Modules = append(Modules, Module{Name: name, ImportPath: importPath, Path: modulePath}) if codePath := filepath.Join(modulePath, "app"); DirExists(codePath) { CodePaths = append(CodePaths, codePath) if viewsPath := filepath.Join(modulePath, "app", "views"); DirExists(viewsPath) { TemplatePaths = append(TemplatePaths, viewsPath) } } glog.Info("Loaded module ", filepath.Base(modulePath)) // Hack: There is presently no way for the testrunner module to add the // "test" subdirectory to the CodePaths. So this does it instead. if importPath == "github.com/hongrich/revel/modules/testrunner" { CodePaths = append(CodePaths, filepath.Join(BasePath, "tests")) } }