Kaynağa Gözat

Adding QR codes to compatible pages

Боровик Антон Викторович 4 yıl önce
ebeveyn
işleme
9162204a98
4 değiştirilmiş dosya ile 60 ekleme ve 4 silme
  1. BIN
      CRYNXkkRVH.png
  2. 40 4
      main.go
  3. 20 0
      output.html
  4. BIN
      printers.exe

BIN
CRYNXkkRVH.png


+ 40 - 4
main.go

@@ -12,16 +12,26 @@ import (
 	"image/png"
 	"log"
 	"net/http"
+	"io/ioutil"
 	"os"
 	"strings"
+	"math/rand"
+	"time"
 )
 
+func init() {
+    rand.Seed(time.Now().UnixNano())
+}
+
+var letterRunes = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
+
 func main() {
 
 	r := mux.NewRouter()
 
 	r.HandleFunc("/", PrinterList)
 	r.HandleFunc("/generate", GenerateQR)
+	r.HandleFunc("/generateCompatible", generateCompatible)
 	r.HandleFunc("/addprinter", AddPrinter)
 	r.HandleFunc("/addcartridge", AddCartridge)
 	r.HandleFunc("/cartridgeOfPrinter", AddCartridgeOfPrinter)
@@ -33,6 +43,24 @@ func main() {
 	http.ListenAndServe(":8888", nil)
 }
 
+func generateCompatible(w http.ResponseWriter, r *http.Request){
+	fmt.Println("New generating request from" + r.RemoteAddr)
+	data, err := ioutil.ReadAll(r.Body)
+	if err != nil{
+		fmt.Println("Something went wrong during generating QR code")
+		fmt.Fprintf(w, "Something went wrong during generating QR code")
+	}
+	filename := GenerateRandomString(10)
+	fmt.Println("Generated name " + filename + " for " + r.RemoteAddr)
+	generateFromText(string(data), filename)
+	fmt.Println("Generated file " + filename + ".png for " + r.RemoteAddr)
+	w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=\"%s\"", filename +".png"))
+	http.ServeFile(w, r, filename)
+	fmt.Println("Served file " + filename + ".png for " + r.RemoteAddr)
+	os.Remove(filename + ".png")
+	fmt.Println("Removed file " + filename + ".png")
+}
+
 func PrinterPage(w http.ResponseWriter, r *http.Request) {
 	db, err := gorm.Open(sqlite.Open("printer.db"), &gorm.Config{})
 
@@ -170,7 +198,7 @@ func GenerateQR(w http.ResponseWriter, r *http.Request) {
 	r.ParseForm()
 	text := strings.Join(r.Form["printer"], "")
 	w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=\"%s\"", text+".png"))
-	generateFromText(text)
+	generateFromText(text, text)
 	http.ServeFile(w, r, text)
 }
 
@@ -217,7 +245,7 @@ func cartridgeQR(text string, filename string) {
 	writePng(filename, code)
 }
 
-func generateFromText(text string) {
+func generateFromText(text string, filename string) {
 	code, err := qr.Encode(text, qr.L, qr.Auto)
 	if err != nil {
 		fmt.Println("Something went wrong...")
@@ -230,11 +258,11 @@ func generateFromText(text string) {
 		log.Fatal(err)
 	}
 
-	writePng(text, code)
+	writePng(filename, code)
 }
 
 func writePng(filename string, img image.Image) {
-	file, err := os.Create(filename)
+	file, err := os.Create(filename + ".png")
 	if err != nil {
 		log.Fatal(err)
 	}
@@ -244,3 +272,11 @@ func writePng(filename string, img image.Image) {
 	}
 	file.Close()
 }
+
+func GenerateRandomString(n int) string {
+    b := make([]rune, n)
+    for i := range b {
+        b[i] = letterRunes[rand.Intn(len(letterRunes))]
+    }
+    return string(b)
+}

+ 20 - 0
output.html

@@ -11,5 +11,25 @@
 		<li>{{ . }}</li>
 		{{ end }}
 	</ul>
+
+	<input type="button" name="generateQR" value="Сгенерировать QR" onclick="getURL();">
+
+
+	<script type="text/javascript">
+		function getURL() {
+			var xhr = new XMLHttpRequest();
+			xhr.open("POST", '/generateCompatible', true);
+			xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
+			xhr.send(window.location.href.toString());
+
+			// var http = new XMLHttpRequest();
+	  //   	var url = '/generate'
+	  //   	var params = window.location.href
+	  //   	http.open('POST', url, true)
+	  //   	http.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
+	  //   	http.Send(params);
+    	}
+
+	</script>
 </body>
 </html>

BIN
printers.exe