source: code/trunk/web/main.go@ 18

Last change on this file since 18 was 18, checked in by manerakai, 22 months ago

Implemented Cookies

File size: 4.3 KB
Line 
1package main
2
3import (
4 "bytes"
5 "net/http"
6 "net/url"
7 "time"
8
9 "codeberg.org/SimpleWeb/SimplyTranslate/engines"
10 "github.com/gofiber/fiber/v2"
11 "github.com/gofiber/template/html/v2"
12)
13
14func main() {
15 engine := html.New("./views", ".html")
16 app := fiber.New(fiber.Config{
17 Views: engine,
18 })
19
20 app.All("/", func(c *fiber.Ctx) error {
21 engine := c.Query("engine")
22 if _, ok := engines.Engines[engine]; !ok || engine == "" {
23 engine = "google"
24 }
25 targetLanguages, err := engines.Engines[engine].TargetLanguages()
26 if err != nil {
27 return c.SendStatus(500)
28 }
29 sourceLanguages, err := engines.Engines[engine].SourceLanguages()
30 if err != nil {
31 return c.SendStatus(500)
32 }
33 originalText := ""
34 translatedText := ""
35 from := ""
36 to := ""
37 ttsFrom := ""
38 ttsTo := ""
39
40 if c.Method() == "POST" {
41 from = c.FormValue("from")
42 to = c.FormValue("to")
43 originalText = c.FormValue("text")
44 if result, err := engines.Engines[engine].Translate(originalText, from, to); err != nil {
45 return c.SendStatus(500)
46 } else {
47 translatedText = result.TranslatedText
48 }
49
50 ttsFromURL, _ := url.Parse("api/tts")
51 fromQuery := url.Values{}
52 fromQuery.Add("lang", from)
53 fromQuery.Add("text", originalText)
54 ttsFromURL.RawQuery = fromQuery.Encode()
55 ttsFrom = ttsFromURL.String()
56
57 ttsToURL, _ := url.Parse("api/tts")
58 toQuery := url.Values{}
59 toQuery.Add("lang", to)
60 toQuery.Add("text", translatedText)
61 ttsToURL.RawQuery = toQuery.Encode()
62 ttsTo = ttsToURL.String()
63
64 fromCookie := new(fiber.Cookie)
65 fromCookie.Name = "from"
66 fromCookie.Value = from
67 fromCookie.Expires = time.Now().Add(24 * time.Hour * 365)
68 c.Cookie(fromCookie)
69
70 toCookie := new(fiber.Cookie)
71 toCookie.Name = "to"
72 toCookie.Value = to
73 toCookie.Expires = time.Now().Add(24 * time.Hour * 365)
74 c.Cookie(toCookie)
75
76 } else if c.Method() == "GET" {
77 from = c.Cookies("from")
78 to = c.Cookies("to")
79 } else {
80 return c.SendStatus(400)
81 }
82 return c.Render("index", fiber.Map{
83 "Engine": engine,
84 "SourceLanguages": targetLanguages,
85 "TargetLanguages": sourceLanguages,
86 "OriginalText": originalText,
87 "TranslatedText": translatedText,
88 "From": from,
89 "To": to,
90 "TtsFrom": ttsFrom,
91 "TtsTo": ttsTo,
92 })
93 })
94
95 app.All("/api/translate", func(c *fiber.Ctx) error {
96 from := ""
97 to := ""
98 engine := ""
99 text := ""
100 if c.Method() == "GET" {
101 engine = c.Query("engine")
102 text = c.Query("text")
103 from = c.Query("from")
104 to = c.Query("to")
105 } else if c.Method() == "POST" {
106 engine = c.FormValue("engine")
107 text = c.FormValue("text")
108 from = c.FormValue("from")
109 to = c.FormValue("to")
110 } else {
111 return c.SendStatus(400)
112 }
113 if _, ok := engines.Engines[engine]; !ok || engine == "" {
114 engine = "google"
115 }
116 if to == "" {
117 return c.SendStatus(400)
118 }
119 if result, err := engines.Engines[engine].Translate(text, from, to); err != nil {
120 return c.SendStatus(500)
121 } else {
122 return c.JSON(result)
123 }
124 })
125
126 app.Get("/api/source_languages", func(c *fiber.Ctx) error {
127 engine := c.Query("engine")
128 if _, ok := engines.Engines[engine]; !ok || engine == "" {
129 engine = "google"
130 }
131 if result, err := engines.Engines[engine].SourceLanguages(); err != nil {
132 return c.SendStatus(500)
133 } else {
134 return c.JSON(result)
135 }
136 })
137
138 app.Get("/api/target_languages", func(c *fiber.Ctx) error {
139 engine := c.Query("engine")
140 if _, ok := engines.Engines[engine]; !ok || engine == "" {
141 engine = "google"
142 }
143 if result, err := engines.Engines[engine].TargetLanguages(); err != nil {
144 return c.SendStatus(500)
145 } else {
146 return c.JSON(result)
147 }
148 })
149
150 app.Get("/api/tts", func(c *fiber.Ctx) error {
151 engine := c.Query("engine")
152 if _, ok := engines.Engines[engine]; !ok || engine == "" {
153 engine = "google"
154 }
155
156 text := c.Query("text")
157 if text == "" {
158 return c.SendStatus(400)
159 }
160
161 lang := c.Query("lang")
162 if lang == "" {
163 lang = "en"
164 }
165
166 if url, err := engines.Engines[engine].Tts(text, lang); err != nil {
167 return c.SendStatus(500)
168 } else {
169 if response, err := http.Get(url); err != nil {
170 return c.SendStatus(500)
171 } else {
172 defer response.Body.Close()
173 var buf bytes.Buffer
174 response.Write(&buf)
175 c.Context().SetContentType("audio/mpeg")
176 return c.Send(buf.Bytes())
177 }
178 }
179
180 })
181
182 app.Static("/static", "./static")
183
184 app.Listen(":3000")
185}
Note: See TracBrowser for help on using the repository browser.