Esempio n. 1
0
func main() {
	lg.Log(lg.INFO, "Initiating parse job...")
	for _, v := range flag.Args() {
		parser(v)
		if !*dbgmode {
			err := os.Remove(v)
			if err != nil {
				lg.Log(lg.ERROR, "Failed to remove file")
			}
		}
	}
}
Esempio n. 2
0
func Render(s swiki) string {
	/* From the Go docs on text/template */
	tmpl, err := template.New("rendered").Funcs(tmplfm).Parse(WIKITEXT)
	if err != nil {
		lg.Log(lg.ERROR, err.Error())
	}

	var buffer = bytes.NewBufferString("")
	err = tmpl.Execute(buffer, s)
	if err != nil {
		lg.Log(lg.ERROR, err.Error())
	}

	buf := strings.Replace(buffer.String(), "{_", "{", -1)
	buf = strings.Replace(buf, "_}", "}", -1)

	return buf
}
Esempio n. 3
0
func parser(s string) {
	var now = time.Now()
	var parses time.Time
	var parsee time.Time
	var ups time.Time
	var upe time.Time
	defer func() {
		naw := time.Now().Sub(now)
		nzw := parsee.Sub(parses)
		nkw := upe.Sub(ups)
		lg.Log(lg.TRACE, "Total:"+naw.String())
		lg.Log(lg.TRACE, "Parse:"+nzw.String())
		lg.Log(lg.TRACE, "Post:"+nkw.String())
	}()

	parses = time.Now()
	tmp, err := ioutil.ReadFile(s)
	if err != nil {
		lg.Log(lg.ERROR, err.Error())
		return
	}

	if *dbgmode {
		regfhd, err := ioutil.TempFile(os.TempDir(), "regp-raw-")
		if err != nil {
			lg.Log(lg.ERROR, "Failed to create debug raw file")
			lg.Log(lg.DEBUG, err.Error())
			return
		}
		lg.Log(lg.DEBUG, "Raw Dump File: "+regfhd.Name())
		lg.Log(lg.DEBUG, "Dumping body into raw file")
		fmt.Fprint(regfhd, tmp)
	}

	regfh, err := ioutil.TempFile(os.TempDir(), "regp-")
	if err != nil {
		lg.Log(lg.ERROR, "Failed to create temporary file")
		lg.Log(lg.DEBUG, err.Error())
		return
	}
	lg.Log(lg.DEBUG, "Temporary File: "+regfh.Name())
	defer func() {
		if regfh != nil && !*dbgmode {
			lg.Log(lg.DEBUG, "RMing temp file "+regfh.Name())
			os.Remove(regfh.Name())
			regfh = nil
		}
	}()

	/*tmpa, err := url.QueryUnescape(string(tmp))
	if err != nil {
		lg.Log(lg.DEBUG,err.Error())
		return
	}*/

	tmpb := strings.Replace(string(tmp), "\r", "", -1)

	if *dbgmode {
		regfhd, err := ioutil.TempFile(os.TempDir(), "regp-post-")
		if err != nil {
			lg.Log(lg.ERROR, "Failed to create debug post-processing dump file")
			lg.Log(lg.DEBUG, err.Error())
			return
		}
		lg.Log(lg.DEBUG, "Processed Dump File: "+regfhd.Name())
		lg.Log(lg.DEBUG, "Dumping tmpb into raw file")
		fmt.Fprint(regfhd, tmpb)
	}

	if strings.HasPrefix(string(tmpb), "REGEDIT4") {
		lg.Log(lg.DEBUG, "Found Windows Registry Editor string")
		fmt.Fprint(regfh, strings.Join(strings.Split(string(tmpb), "\n")[1:], "\n"))
	} else {
		lg.Log(lg.INFO, "Invalid .reg")
		lg.Log(lg.INFO, "Not a valid .reg file.")
		return
	}

	registry, err := config.Read(regfh.Name(), config.ALTERNATIVE_COMMENT, config.ALTERNATIVE_SEPARATOR, false, false)

	if err != nil {
		lg.Log(lg.DEBUG, "Not a valid .reg file.")
		lg.Log(lg.DEBUG, err.Error())
		return
	}

	lg.Log(lg.TRACE, "Entering print")
	n := 0
	if len(registry.Sections()) != 0 {
		n = 1
	}
	var aok bool = true
	var aok2 bool = true
	var buff = make(map[string]string)
	lg.Log(lg.TRACE, fmt.Sprint("n = ", n))
	for _, vv := range registry.Sections() {
		if vv == "DEFAULT" {
			continue
		}

		if strings.HasPrefix(vv, "-") { // Lol an actual .reg file
			lg.Log(lg.DEBUG, "- found")
			aok = false
			break
		} else if strings.Count(vv, "\"") > 2 {
			aok = false
			break
		}

		lg.Log(lg.DEBUG, vv)

		r, err := registry.Options(vv)
		if err != nil {
			lg.Log(lg.DEBUG, err.Error())
		}

		for _, vvv := range r {
			rr, err := registry.RawString(vv, vvv)
			if rr == "-" {
				lg.Log(lg.TRACE, "- found")
				aok = false // ya blew it
				// ya could'a had it all
				// but 'cha blew it
			}

			if err != nil {
				lg.Log(lg.DEBUG, err.Error())
			}

			lg.Log(lg.DEBUG, fmt.Sprintf("%v=%v\n", vvv, rr))
		}

		rs, _ := registry.RawString(vv, "@")
		var swiggy = swiki{Key: vv, Default: rs}
		for _, vvv := range r {
			rr, _ := registry.RawString(vv, vvv)
			var i = ParseType(rr)
			lg.Log(lg.DEBUG, i)
			swiggy.Values = append(swiggy.Values, swiki{Key: vvv, Type: GetName(i)})
		}
		buff[vv] = Render(swiggy)
	}

	if !aok {
		lg.Log(lg.DEBUG, "Not aok, terminating")
		return
	} else {
		lg.Log(lg.DEBUG, "aok = true, continuing")
	}
	parsee = time.Now()

	ups = time.Now()
	hkeywiki := url.URL{
		Scheme: "http",
		Host:   "hkey.n0v4.com",
		Path:   "/w/api.php",
	}
	api := mwapi.NewMWApi(hkeywiki)
	api.Login(USER, PASSWD)

	delete(buff, "DEFAULT")
	for k, v := range buff {
		lg.Log(lg.DEBUG, k)
		if aok2 {
			api.Login(USER, PASSWD)
			t := api.GetToken("edit")
			lg.Log(lg.TRACE, t.Tokens.Edittoken)
			params := url.Values{
				"action":     {"edit"},
				"title":      {k},
				"createonly": {"1"},
				"bot":        {"1"},
				"text":       {fmt.Sprintf("#REDIRECT [[%v]]", strings.Replace(k, "\\", "/", -1))},
				"token":      {t.Tokens.Edittoken},
			}
			resp := api.PostForm(params)
			if resp.StatusCode != 200 {
				rbody, _ := ioutil.ReadAll(resp.Body)
				lg.Log(lg.DEBUG, string(rbody))
			}
		}
		api.Login(USER, PASSWD)
		t := api.GetToken("edit")
		lg.Log(lg.TRACE, t.Tokens.Edittoken)

		params := url.Values{
			"action":     {"edit"},
			"title":      {strings.Replace(k, "\\", "/", -1)},
			"createonly": {"1"},
			"bot":        {"1"},
			"text":       {v},
			"token":      {t.Tokens.Edittoken},
		}