gtranslate/main.go

70 lines
2.0 KiB
Go
Raw Normal View History

2021-01-17 20:09:57 +00:00
// gtranslate - Better front-end for Google Translate
// Copyright (C) 2021-present Alexey Yerin
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
package main
import (
"html/template"
"log"
"net/http"
2021-01-18 20:02:00 +00:00
"net/url"
2021-01-17 20:09:57 +00:00
"path"
"github.com/gorilla/mux"
"github.com/spf13/pflag"
)
2021-01-18 20:25:57 +00:00
type TranslateSettings struct {
proxy *url.URL
userAgent string
}
2021-01-17 20:09:57 +00:00
func main() {
bind := pflag.StringP("bind", "b", ":5000", "Address to bind the server to, [addr]:port")
templatesDir := pflag.String("templates-dir", "./templates", "Templates directory")
2021-01-17 20:09:57 +00:00
staticDir := pflag.String("static-dir", "./static", "Static files directory")
2021-01-18 20:02:00 +00:00
proxy := pflag.String("proxy", "", "Proxy URL, with no scheme http is assumed")
2021-01-18 20:08:57 +00:00
userAgent := pflag.String("user-agent", "", "User-Agent header to use")
2021-01-17 20:09:57 +00:00
pflag.Parse()
2021-01-18 20:02:00 +00:00
var proxyUrl *url.URL
if *proxy != "" {
u, err := url.Parse(*proxy)
if err != nil {
log.Fatalln("Invalid proxy URL:", err)
}
proxyUrl = u
}
settings := TranslateSettings{proxyUrl, *userAgent}
tmpl := template.Must(template.ParseGlob(path.Join(*templatesDir, "*.html")))
2021-01-17 20:09:57 +00:00
r := mux.NewRouter()
2021-01-22 20:42:13 +00:00
r.HandleFunc("/", CreateWebHandler(tmpl, &settings)).Methods("GET", "POST")
r.HandleFunc("/api", CreateApiHandler(&settings)).Methods("POST")
2021-01-17 20:09:57 +00:00
// Static files
fs := http.FileServer(http.Dir(*staticDir))
r.PathPrefix("/static/").Handler(http.StripPrefix("/static/", fs))
log.Println("Starting on", *bind)
log.Fatalln(http.ListenAndServe(*bind, r))
}