-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhelper.go
79 lines (70 loc) · 6.43 KB
/
helper.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
package main
import (
"errors"
"fmt"
"math/rand"
"net/http"
"regexp"
"time"
"github.com/globalsign/mgo/bson"
"github.com/go-bongo/bongo"
"github.com/sirupsen/logrus"
)
var charset = []string {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", "H", "U", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"}
var emojiCharset = []string {"😀","😃","😄","😁","😆","😊","😂","😅","😇","🙂","🙃","😉","😌","😚","😙","😗","😘","😍","😋","😛","😝","😜","🤪","🤩","😎","🤓","🧐","🤨","😏","😒","😞","😔","😟","😖","😣","🙁","😕","😫","😩","😢","😭","😤","😠","😡","🤬","🤯","😳","😓","😥","😰","😨","😱","🤗","🤔","🤭","🤫","🤥","🙄","😬","😑","😐","😶","😯","😦","😧","😮","😲","🤐","😵","😪","🤤","😴","🤢","🤮","🤧","😷","🤒","🤕","🤑","🤠","😈","👿","👻","💩","🤡","👺","👹","💀","👽","👾","🤖","😻","😹","😸","😺","🎃","😼","😽","🙀","😿","😾","🙌","🤲","👐","👏","🤝","🤛","✊","👊","👎","👍","🤜","🤞","🤟","🤘","👇","👆","👉","👈","👌","✋","🤚","🖐","🖖","🖕","💪","🤙","👋","🙏","💍","💄","💋","👄","👁","👣","👃","👂","👅","👀","🧠","🗣","👤","👥","👩","👦","🧒","👧","👶","🧑","👨","👱","🧔","👳","👲","👴","🧓","👵","🧕","👮","👷","💂","🕵","🍳","🌾","🎓","🎤","💻","🏭","🏫","💼","🔧","🚒","🎨","🔬","🚀","👸","🤵","👰","🤴","🤶","🎅","🧙","🧟","🧛","🧝","🧜","👗","👔","👖","👕","👚","👙","👘","👠","👡","👢","🧣","🧤","🧦","👟","👞","🎩","🧢","👒","⛑","👜","👛","👝","👑","🎒","👓","🕶","🌂","🐶","🐱","🐭","🐹","🐰","🐯","🐨","🐼","🐻","🦊","🦁","🐮","🐷","🐽","🐸","🐒","🙊","🙉","🙈","🐵","🐔","🐧","🐦","🐤","🐣","🦇","🦉","🦅","🦆","🐥","🐺","🐗","🐴","🦄","🐝","🐞","🐚","🐌","🦋","🐛","🐜","🦗","🕷","🕸","🦂","🦕","🦖","🦎","🐍","🐢","🐙","🦑","🦐","🦀","🐡","🐋","🐳","🐬","🐟","🐠","🦈","🐊","🐅","🐆","🦓","🐫","🐪","🦏","🐘","🦍","🦒","🐃","🐂","🐄","🐎","🦌","🐐","🐑","🐏","🐖","🐕","🐩","🐈","🐓","🦃","🐿","🐀","🐁","🐇","🕊","🦔","🐾","🐉","🐲","🌵","🌱","🌴","🌳","🌲","🎄","🌿","☘","🍀","🎍","🎋","🍄","🍁","🍂","🍃","💐","🌷","🌹","🥀","🌺","🌝","🌞","🌻","🌼","🌸","🌛","🌜","🌚","🌕","🌖","🌓","🌒","🌑","🌘","🌗","🌔","🌙","🌎","🌍","🌏","✨","🌟","⭐","💫","💥","🔥","🌪","🌈","🌥","⛅","🌤","🌦","🌧","⛈","🌩","🌨","💨","🌬","⛄","💧","💦","🌊","🌫","🍏","🍎","🍐","🍊","🍋","🍈","🍓","🍇","🍉","🍌","🍒","🍑","🍍","🥥","🥝","🥒","🥦","🥑","🍆","🍅","🌶","🌽","🥕","🥔","🍠","🧀","🥨","🥖","🍞","🥐","🥚","🥞","🥓","🥩","🍟","🍔","🌭","🍖","🍗","🍕","🥪","🥙","🌮","🌯","🥗","🥘","🥫","🍝","🍜","🥟","🍱","🍣","🍛","🍲","🍤","🍙","🍚","🍘","🍥","🍨","🍧","🍡","🍢","🥠","🍦","🥧","🍰","🎂","🍮","🍩","🍿","🍫","🍬","🍭","🍪","🌰","🥜","🍯","🥛","🍶","🥤","🍼","🍺","🍻","🥂","🍷","🥃","🍴","🥄","🍾","🍹","🍸","🍽","🥣","🥡","🥢","🎾","🏈","🏀","⚽","🏐","🏉","🎱","🏓","🏸","⛳","🏏","🏑","🏒","🥅","🏹","🎣","🥊","🎽","⛷","🎿","🛷","🥌","⛸","🏂","🤼","🏆","🥇","🥈","🥉","🎫","🎗","🏵","🎖","🏅","🎟","🎪","🎭","🎼","🎧","🎬","🎹","🥁","🎷","🎺","🎸","🎮","🎳","🎯","🎲","🎻","🎰","🚗","🚕","🚙","🚌","🚎","🚐","🚑","🚓","🏎","🚚","🚛","🚜","🛴","🚲","🚍","🚔","🚨","🏍","🛵","🚘","🚖","🚡","🚠","🚄","🚝","🚞","🚋","🚃","🚅","🚈","🚂","🚇","🛬","🛫","🚉","🚊","🛩","💺","🛰","🛸","🛳","⛴","🚢","⛽","🗺","🚏","🚥","🚦","🚧","🗿","🗽","🗼","🏰","🏯","⛲","🎠","🎢","🎡","🏟","⛱","🏖","🏝","🏜","⛺","🏕","🗻","🏔","⛰","⌚","📱","🖥","🖨","🗜","💽","📼","📷","📽","🎞","📠","📺","🎛","⏱","🔦","💡","📞","📸","💶","💴","💵","💸","🔫","💣","🚬","🎊","🎉","🏮","🎏","💊","🚿","🗝","🚰","🔑","🛎","🛏","🛒", "❤️", "🧡","💛","💚","💙","💜","🖤","💯","✅","❎","💤","❔","❓","❕","❗"}
func getUniqueRandomString(length int, emoji bool) (string, error) {
Start:
name := randomString(length, emoji)
link := &Link{}
err := connection.Collection("links").FindOne(bson.M{"Name": name}, link)
if _, ok := err.(*bongo.DocumentNotFoundError); ok {
return name, nil
} else if err != nil {
return "", err
} else {
goto Start
}
}
func randomString(length int, emoji bool) string {
r := rand.New(rand.NewSource(time.Now().UnixNano()))
randomString := ""
if emoji {
for i := 0; i < length; i++ {
randomString += emojiCharset[r.Intn(len(emojiCharset))]
}
} else {
for i := 0; i < length; i++ {
randomString += charset[r.Intn(len(charset))]
}
}
return randomString
}
func getLink(name string) (error, *Link) {
link := &Link{}
err := connection.Collection("links").FindOne(bson.M{"name": name}, link)
if _, ok := err.(*bongo.DocumentNotFoundError); ok {
logrus.Info(fmt.Sprintf("Short \"%s\" not found", name))
return errors.New("404"), nil
}
return err, link
}
func addHttp(url string) string {
r := regexp.MustCompile("^(((f|ht)tps?)|tg|steam)://")
if !r.MatchString(url) {
url = "http://" + url
}
return url
}
func returnError500(err error, w http.ResponseWriter) {
logrus.Error(err)
w.WriteHeader(http.StatusInternalServerError)
_, _ = fmt.Fprintf(w, "Internal Server error..")
}
func returnError404(w http.ResponseWriter) {
w.WriteHeader(http.StatusNotFound)
_, _ = fmt.Fprintf(w, "404 Document not found.")
}
func returnError401(w http.ResponseWriter) {
w.WriteHeader(http.StatusUnauthorized)
_, _ = fmt.Fprintf(w, "Unauthorized.")
}