|
@@ -0,0 +1,222 @@
|
|
|
|
+package main
|
|
|
|
+
|
|
|
|
+import (
|
|
|
|
+ "os"
|
|
|
|
+ "log"
|
|
|
|
+ "net/http"
|
|
|
|
+ "strconv"
|
|
|
|
+ "strings"
|
|
|
|
+ "errors"
|
|
|
|
+ "encoding/base64"
|
|
|
|
+ "bufio"
|
|
|
|
+ "io/ioutil"
|
|
|
|
+ "time"
|
|
|
|
+)
|
|
|
|
+
|
|
|
|
+/*
|
|
|
|
+ SYSTEM COMMON FUNCTIONS
|
|
|
|
+
|
|
|
|
+ This is a system function that put those we usually use function but not belongs to
|
|
|
|
+ any module / system.
|
|
|
|
+
|
|
|
|
+ E.g. fileExists / IsDir etc
|
|
|
|
+
|
|
|
|
+*/
|
|
|
|
+
|
|
|
|
+/*
|
|
|
|
+ Basic Response Functions
|
|
|
|
+
|
|
|
|
+ Send response with ease
|
|
|
|
+*/
|
|
|
|
+//Send text response with given w and message as string
|
|
|
|
+func sendTextResponse(w http.ResponseWriter, msg string) {
|
|
|
|
+ w.Write([]byte(msg))
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//Send JSON response, with an extra json header
|
|
|
|
+func sendJSONResponse(w http.ResponseWriter, json string) {
|
|
|
|
+ w.Header().Set("Content-Type", "application/json")
|
|
|
|
+ w.Write([]byte(json))
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func sendErrorResponse(w http.ResponseWriter, errMsg string) {
|
|
|
|
+ w.Header().Set("Content-Type", "application/json")
|
|
|
|
+ w.Write([]byte("{\"error\":\"" + errMsg + "\"}"))
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func sendOK(w http.ResponseWriter) {
|
|
|
|
+ w.Header().Set("Content-Type", "application/json")
|
|
|
|
+ w.Write([]byte("\"OK\""))
|
|
|
|
+}
|
|
|
|
+/*
|
|
|
|
+ The paramter move function (mv)
|
|
|
|
+
|
|
|
|
+ You can find similar things in the PHP version of ArOZ Online Beta. You need to pass in
|
|
|
|
+ r (HTTP Request Object)
|
|
|
|
+ getParamter (string, aka $_GET['This string])
|
|
|
|
+
|
|
|
|
+ Will return
|
|
|
|
+ Paramter string (if any)
|
|
|
|
+ Error (if error)
|
|
|
|
+
|
|
|
|
+*/
|
|
|
|
+func mv(r *http.Request, getParamter string, postMode bool) (string, error) {
|
|
|
|
+ if postMode == false {
|
|
|
|
+ //Access the paramter via GET
|
|
|
|
+ keys, ok := r.URL.Query()[getParamter]
|
|
|
|
+
|
|
|
|
+ if !ok || len(keys[0]) < 1 {
|
|
|
|
+ //log.Println("Url Param " + getParamter +" is missing")
|
|
|
|
+ return "", errors.New("GET paramter " + getParamter + " not found or it is empty")
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // Query()["key"] will return an array of items,
|
|
|
|
+ // we only want the single item.
|
|
|
|
+ key := keys[0]
|
|
|
|
+ return string(key), nil
|
|
|
|
+ } else {
|
|
|
|
+ //Access the parameter via POST
|
|
|
|
+ r.ParseForm()
|
|
|
|
+ x := r.Form.Get(getParamter)
|
|
|
|
+ if len(x) == 0 || x == "" {
|
|
|
|
+ return "", errors.New("POST paramter " + getParamter + " not found or it is empty")
|
|
|
|
+ }
|
|
|
|
+ return string(x), nil
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func stringInSlice(a string, list []string) bool {
|
|
|
|
+ for _, b := range list {
|
|
|
|
+ if b == a {
|
|
|
|
+ return true
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return false
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+func fileExists(filename string) bool {
|
|
|
|
+ _, err := os.Stat(filename)
|
|
|
|
+ if os.IsNotExist(err) {
|
|
|
|
+ return false
|
|
|
|
+ }
|
|
|
|
+ return true
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+func IsDir(path string) bool{
|
|
|
|
+ if (fileExists(path) == false){
|
|
|
|
+ return false
|
|
|
|
+ }
|
|
|
|
+ fi, err := os.Stat(path)
|
|
|
|
+ if err != nil {
|
|
|
|
+ log.Fatal(err)
|
|
|
|
+ return false
|
|
|
|
+ }
|
|
|
|
+ switch mode := fi.Mode(); {
|
|
|
|
+ case mode.IsDir():
|
|
|
|
+ return true
|
|
|
|
+ case mode.IsRegular():
|
|
|
|
+ return false
|
|
|
|
+ }
|
|
|
|
+ return false
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func inArray(arr []string, str string) bool {
|
|
|
|
+ for _, a := range arr {
|
|
|
|
+ if a == str {
|
|
|
|
+ return true
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return false
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ func timeToString(targetTime time.Time) string{
|
|
|
|
+ return targetTime.Format("2006-01-02 15:04:05")
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ func IntToString(number int) string{
|
|
|
|
+ return strconv.Itoa(number)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ func StringToInt(number string) (int, error){
|
|
|
|
+ return strconv.Atoi(number)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ func StringToInt64(number string) (int64, error){
|
|
|
|
+ i, err := strconv.ParseInt(number, 10, 64)
|
|
|
|
+ if err != nil {
|
|
|
|
+ return -1, err
|
|
|
|
+ }
|
|
|
|
+ return i, nil
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ func Int64ToString(number int64) string{
|
|
|
|
+ convedNumber:=strconv.FormatInt(number,10)
|
|
|
|
+ return convedNumber
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ func GetUnixTime() int64{
|
|
|
|
+ return time.Now().Unix()
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ func LoadImageAsBase64(filepath string) (string, error){
|
|
|
|
+ if !fileExists(filepath){
|
|
|
|
+ return "", errors.New("File not exists")
|
|
|
|
+ }
|
|
|
|
+ f, _ := os.Open(filepath)
|
|
|
|
+ reader := bufio.NewReader(f)
|
|
|
|
+ content, _ := ioutil.ReadAll(reader)
|
|
|
|
+ encoded := base64.StdEncoding.EncodeToString(content)
|
|
|
|
+ return string(encoded), nil
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ func PushToSliceIfNotExist(slice []string, newItem string) []string {
|
|
|
|
+ itemExists := false
|
|
|
|
+ for _, item := range slice{
|
|
|
|
+ if item == newItem{
|
|
|
|
+ itemExists = true
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if !itemExists{
|
|
|
|
+ slice = append(slice, newItem)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return slice
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ func RemoveFromSliceIfExists(slice []string, target string) []string {
|
|
|
|
+ newSlice := []string{}
|
|
|
|
+ for _, item := range slice{
|
|
|
|
+ if item != target{
|
|
|
|
+ newSlice = append(newSlice, item)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return newSlice;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //Get the IP address of the current authentication user
|
|
|
|
+func ReflectUserIP(w http.ResponseWriter, r *http.Request) {
|
|
|
|
+ requestPort,_ := mv(r, "port", false)
|
|
|
|
+ showPort := false;
|
|
|
|
+ if (requestPort == "true"){
|
|
|
|
+ //Show port as well
|
|
|
|
+ showPort = true;
|
|
|
|
+ }
|
|
|
|
+ IPAddress := r.Header.Get("X-Real-Ip")
|
|
|
|
+ if IPAddress == "" {
|
|
|
|
+ IPAddress = r.Header.Get("X-Forwarded-For")
|
|
|
|
+ }
|
|
|
|
+ if IPAddress == "" {
|
|
|
|
+ IPAddress = r.RemoteAddr
|
|
|
|
+ }
|
|
|
|
+ if (!showPort){
|
|
|
|
+ IPAddress = IPAddress[:strings.LastIndex(IPAddress, ":")]
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ w.Write([]byte(IPAddress))
|
|
|
|
+ return;
|
|
|
|
+}
|