func (p *PathMapper) doXmlPathMapping(b []byte) []byte { var processedMapping = map[string]string{} r := regexp.MustCompile(`filename=["]?file://(\S+)/Data/Temporary/[^/]*/Cache/Code/Flow_Object_Classes/([^"]*)\.php`) for _, match := range r.FindAllStringSubmatch(string(b), -1) { path := match[1] + "/Data/Temporary/" + p.Config.Context + "/Cache/Code/Flow_Object_Classes/" + match[2] + ".php" if _, ok := processedMapping[path]; ok == false { if originalPath, exist := mapping[path]; exist { if p.Config.VeryVerbose { logger.Info("Umpa Lumpa can help you, he know the mapping\n%s\n%s\n", logger.Colorize(">>> "+fmt.Sprintf(h, path), "yellow"), logger.Colorize(">>> "+fmt.Sprintf(h, p.getRealFilename(originalPath)), "green")) } processedMapping[path] = originalPath } else { originalPath = p.readOriginalPathFromCache(path) processedMapping[path] = originalPath } } } for path, originalPath := range processedMapping { path = p.getRealFilename(path) originalPath = p.getRealFilename(originalPath) b = bytes.Replace(b, []byte(path), []byte(originalPath), -1) } return b }
func (p *PathMapper) registerPathMapping(path string, originalPath string) string { dat, err := ioutil.ReadFile(path) errorhandler.PanicHandling(err) //check if file contains flow annotation if strings.Contains(string(dat), "@Flow\\") { if p.Config.Verbose { logger.Info("%s", "Our Umpa Lumpa take care of your mapping and they did a great job, they found a proxy for you:") logger.Info(">>> %s\n", path) } if _, exist := mapping[path]; exist == false { mapping[path] = originalPath } return path } return originalPath }
func (p *PathMapper) readOriginalPathFromCache(path string) string { dat, err := ioutil.ReadFile(path) errorhandler.PanicHandling(err) r := regexp.MustCompile(`(?m)^# PathAndFilename: (.*)$`) match := r.FindStringSubmatch(string(dat)) //todo check if the match contain something originalPath := match[1] if p.Config.VeryVerbose { logger.Info("Umpa Lumpa need to work harder, need to reverse this one\n>>> %s\n>>> %s\n", logger.Colorize(fmt.Sprintf(h, path), "yellow"), logger.Colorize(fmt.Sprintf(h, originalPath), "green")) } p.registerPathMapping(path, originalPath) return originalPath }
func (p *Proxy) log(s string, args ...interface{}) { if p.Config.Verbose { logger.Info(s, args...) } }