forked from tcp.direct/tcp.ac
joneshole fuck
This commit is contained in:
parent
de43f676ad
commit
16ee6a6875
16
config.toml
16
config.toml
@ -1,17 +1,17 @@
|
|||||||
title = "tcp.ac config"
|
title = "tcp.ac config"
|
||||||
|
|
||||||
[global]
|
[global]
|
||||||
debug = false
|
debug = true
|
||||||
|
|
||||||
[http]
|
[http]
|
||||||
baseurl = "http://127.0.0.1/"
|
baseurl = "http://192.168.69.1/"
|
||||||
bindip = "127.0.0.1"
|
bindip = "192.168.69.1"
|
||||||
port = 8080
|
port = 80
|
||||||
|
|
||||||
[img]
|
[img]
|
||||||
uidsize = 6
|
uidsize = 4
|
||||||
delkeysize = 24
|
delkeysize = 12
|
||||||
|
|
||||||
[files]
|
[files]
|
||||||
data = "../data/"
|
data = "/etc/tcpac/data/"
|
||||||
logs = "../logs/"
|
logs = "/etc/tcpac/logs/"
|
||||||
|
@ -41,7 +41,7 @@ func configRead() {
|
|||||||
// bind port
|
// bind port
|
||||||
s = "http.port"
|
s = "http.port"
|
||||||
i := viper.GetInt(s)
|
i := viper.GetInt(s)
|
||||||
webPort = strconv.Itoa(i) // int looks cleaner in config
|
webPort = strconv.Itoa(i) // int looks cleaner in config
|
||||||
|
|
||||||
// bind IP
|
// bind IP
|
||||||
s = "http.bindip"
|
s = "http.bindip"
|
||||||
@ -67,6 +67,5 @@ func configRead() {
|
|||||||
log.Debug().Str("logDir", logDir).Str("dbDir", dbDir).Msg("Filesystem")
|
log.Debug().Str("logDir", logDir).Str("dbDir", dbDir).Msg("Filesystem")
|
||||||
log.Debug().Int("keySize", keySize).Int("uidSize", uidSize).Msg("UUIDs")
|
log.Debug().Int("keySize", keySize).Int("uidSize", uidSize).Msg("UUIDs")
|
||||||
|
|
||||||
|
//
|
||||||
//
|
|
||||||
}
|
}
|
||||||
|
16
src/img.go
16
src/img.go
@ -33,7 +33,9 @@ func (p Post) Serve(c *gin.Context) {
|
|||||||
keyurl = baseUrl + "d/" + p.Type + "/" + p.Key
|
keyurl = baseUrl + "d/" + p.Type + "/" + p.Key
|
||||||
}
|
}
|
||||||
|
|
||||||
if p.Priv == true { priv = "yes" }
|
if p.Priv == true {
|
||||||
|
priv = "yes"
|
||||||
|
}
|
||||||
|
|
||||||
log.Info().Str("type", p.Type).Str("uid", p.Uid).Str("key", p.Key).Str("private", priv).Msg("success")
|
log.Info().Str("type", p.Type).Str("uid", p.Uid).Str("key", p.Key).Str("private", priv).Msg("success")
|
||||||
c.JSON(201, gin.H{"Imgurl": url, "ToDelete": keyurl})
|
c.JSON(201, gin.H{"Imgurl": url, "ToDelete": keyurl})
|
||||||
@ -112,7 +114,7 @@ func imgView(c *gin.Context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// if it doesn't match the key size or it isn't alphanumeric - throw it out
|
// if it doesn't match the key size or it isn't alphanumeric - throw it out
|
||||||
if (!valid.IsAlphanumeric(rUid) || len(rUid) != uidSize) {
|
if !valid.IsAlphanumeric(rUid) || len(rUid) != uidSize {
|
||||||
log.Error().Str("func", fn).Msg("request discarded as invalid") // these limits should be variables eventually
|
log.Error().Str("func", fn).Msg("request discarded as invalid") // these limits should be variables eventually
|
||||||
errThrow(c, 400, "400", "400")
|
errThrow(c, 400, "400", "400")
|
||||||
return
|
return
|
||||||
@ -224,7 +226,7 @@ func imgPost(c *gin.Context) {
|
|||||||
|
|
||||||
post := &Post{
|
post := &Post{
|
||||||
Type: "i",
|
Type: "i",
|
||||||
Uid: ogUid,
|
Uid: ogUid,
|
||||||
Key: "",
|
Key: "",
|
||||||
Priv: false,
|
Priv: false,
|
||||||
}
|
}
|
||||||
@ -241,17 +243,17 @@ func imgPost(c *gin.Context) {
|
|||||||
log.Info().Str("func", fn).Msg("no duplicate images found, generating uid and delete key")
|
log.Info().Str("func", fn).Msg("no duplicate images found, generating uid and delete key")
|
||||||
|
|
||||||
// generate new uid and delete key
|
// generate new uid and delete key
|
||||||
uid := gouid.String(uidSize)
|
uid := gouid.String(uidSize, gouid.MixedCaseAlphaNum)
|
||||||
key = gouid.String(keySize)
|
key = gouid.String(keySize, gouid.MixedCaseAlphaNum)
|
||||||
|
|
||||||
// lets make sure that we don't clash even though its highly unlikely
|
// lets make sure that we don't clash even though its highly unlikely
|
||||||
for uidRef, _ := imgDB.Get([]byte(uid)); uidRef != nil; {
|
for uidRef, _ := imgDB.Get([]byte(uid)); uidRef != nil; {
|
||||||
log.Info().Str("func", fn).Msg(" uid already exists! generating new...")
|
log.Info().Str("func", fn).Msg(" uid already exists! generating new...")
|
||||||
uid = gouid.String(uidSize)
|
uid = gouid.String(uidSize, gouid.MixedCaseAlphaNum)
|
||||||
}
|
}
|
||||||
for keyRef, _ := keyDB.Get([]byte(key)); keyRef != nil; {
|
for keyRef, _ := keyDB.Get([]byte(key)); keyRef != nil; {
|
||||||
log.Info().Str("func", fn).Msg(" delete key already exists! generating new...")
|
log.Info().Str("func", fn).Msg(" delete key already exists! generating new...")
|
||||||
key = gouid.String(keySize)
|
key = gouid.String(keySize, gouid.MixedCaseAlphaNum)
|
||||||
}
|
}
|
||||||
|
|
||||||
// save checksum to db to prevent dupes in the future
|
// save checksum to db to prevent dupes in the future
|
||||||
|
24
src/main.go
24
src/main.go
@ -1,15 +1,15 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/rs/zerolog/log"
|
|
||||||
"github.com/muesli/termenv"
|
|
||||||
"github.com/gin-gonic/gin"
|
|
||||||
"github.com/rs/zerolog"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"github.com/muesli/termenv"
|
||||||
|
"github.com/rs/zerolog"
|
||||||
|
"github.com/rs/zerolog/log"
|
||||||
"os"
|
"os"
|
||||||
)
|
)
|
||||||
|
|
||||||
var Banner string = "ICAsZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgODggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIApNTTg4TU1NICxhZFBQWWJhLCA4YixkUFBZYmEsICAgICAgLGFkUFBZWWJhLCAgLGFkUFBZYmEsICAKICA4OCAgIGE4IiAgICAgIiIgODhQJyAgICAiOGEgICAgICIiICAgICBgWTggYTgiICAgICAiIiAgCiAgODggICA4YiAgICAgICAgIDg4ICAgICAgIGQ4ICAgICAsYWRQUFBQUDg4IDhiICAgICAgICAgIAogIDg4LCAgIjhhLCAgICxhYSA4OGIsICAgLGE4IiA4ODggODgsICAgICw4OCAiOGEsICAgLGFhICAKICAiWTg4OCBgIlliYmQ4IicgODhgWWJiZFAiJyAgODg4IGAiOGJiZFAiWTggIGAiWWJiZDgiJyAgCiAgICAgICAgICAgICAgICAgIDg4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICA4OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK"
|
var Banner string = "CiAgLGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogIDg4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKTU04OE1NTSAsYWRQUFliYSwgOGIsZFBQWWJhLCAgICAgICxhZFBQWVliYSwgICxhZFBQWWJhLCAgCiAgODggICBhOCIgICAgICIiIDg4UCcgICAgIjhhICAgICAiIiAgICAgYFk4IGE4IiAgICAgIiIgIAogIDg4ICAgOGIgICAgICAgICA4OCAgICAgICBkOCAgICAgLGFkUFBQUFA4OCA4YiAgICAgICAgICAKICA4OCwgICI4YSwgICAsYWEgODhiLCAgICxhOCIgODg4IDg4LCAgICAsODggIjhhLCAgICxhYSAgCiAgIlk4ODggYCJZYmJkOCInIDg4YFliYmRQIicgIDg4OCBgIjhiYmRQIlk4ICBgIlliYmQ4IicgIAogICAgICAgICAgICAgICAgICA4OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgODggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCg=="
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
|
||||||
@ -20,7 +20,7 @@ func init() {
|
|||||||
fmt.Println(out)
|
fmt.Println(out)
|
||||||
|
|
||||||
// initialize the logger before the config: that way we can output debug lines
|
// initialize the logger before the config: that way we can output debug lines
|
||||||
// pertaining to the parsing of the configuration init
|
// pertaining to the parsing of the configuration init
|
||||||
|
|
||||||
//////////// init logging ////////////
|
//////////// init logging ////////////
|
||||||
|
|
||||||
@ -38,21 +38,21 @@ func init() {
|
|||||||
|
|
||||||
// now that we know where to put the log file, we can start output (replace logger)
|
// now that we know where to put the log file, we can start output (replace logger)
|
||||||
|
|
||||||
err = os.MkdirAll(logDir, 0755)
|
err = os.MkdirAll(logDir, 0755)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal().Str("directory",logDir).Str("intent","logDir").Err(err).Msg("failed to open directory")
|
log.Fatal().Str("directory", logDir).Str("intent", "logDir").Err(err).Msg("failed to open directory")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
err = os.MkdirAll(dbDir, 0755)
|
err = os.MkdirAll(dbDir, 0755)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal().Str("directory",dbDir).Str("intent","dbDir").Err(err).Msg("failed to open directory")
|
log.Fatal().Str("directory", dbDir).Str("intent", "dbDir").Err(err).Msg("failed to open directory")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
lf, err := os.OpenFile(logDir+"tcpac.log", os.O_RDWR | os.O_CREATE | os.O_APPEND, 0666)
|
lf, err := os.OpenFile(logDir+"tcpac.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal().Str("logDir",logDir).Err(err).Msg("Error opening log file!")
|
log.Fatal().Str("logDir", logDir).Err(err).Msg("Error opening log file!")
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr})
|
log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr})
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/gin-contrib/logger"
|
|
||||||
"github.com/gin-contrib/gzip"
|
|
||||||
"github.com/rs/zerolog/log"
|
|
||||||
"github.com/gin-gonic/gin"
|
|
||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
|
"github.com/gin-contrib/gzip"
|
||||||
|
"github.com/gin-contrib/logger"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"github.com/rs/zerolog/log"
|
||||||
)
|
)
|
||||||
|
|
||||||
var favicon string = "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"
|
var favicon string = "AAABAAEAUFAQAAEABAC0CgAAFgAAAIlQTkcNChoKAAAADUlIRFIAAABQAAAAUAgGAAAAjhHyrQAACntJREFUeJztXF1oG9kV/sbWeKTYkSxbUeufrIxjJxTi+CfdNBAX6gbSQE3thoJhQ8s2y5YNgYRlYSFst+6mLH4ptOsS1uziQlgSGlpCDF5oAo3zYEPWTezECYTUSprZKHaryJIlO5aUiTJ9mJ3xSDOauSONNHKa70lo7s+55557zrnnnnupCtrN88/X8Aq5gQLAW03ERkYZTTFW07Ch8UoC88QrCcwTNsq2CeCSAIDdh52wO8tN7SARS+HG2Rhx+db9dni3O0xr19tmQ2v3ZuL+s2F2LIq1hReK/21yC3zwvddQ5dEn3ghWQ3HcOHuHuPyB4w1o7KzRLReYDRMxcM+hGux7y0fcfzYE/3Ub8wsJxf82jk/m3Xi+2H3YiboWOwDA7rIR1bG7bOgd9GL8o2AhSdOFjaYYWMlEmmLQfqAGrT1bDNXzNDvhaXbi8h+f4FlU3Q4WQ79LOtAqY3LoEw8c1bnr3Z/+rl76ff74YzNIMgRJB1olhR399fqFCOtbwkCRcTTFwD8ZQaVrNWthR3W5pOBXQ3FUeRwIzIYRX05lrfM0ymkSILajBnnbdW1VmgZuNRTX7Efe1/zEE92yAIjUiqQDOT6JCydCmoX3vLNJYqA4mJt/D2N6ZN2Sc7wxdZDJFDlDQ2xCoun4RJMmA0m8B7HM+O8DiNzRVxvv39CeNCDDCmstYy2myOuRGCWaYvCj37jg69qskEBpYi4uwP/VijQh9yYiCMwJq0Nt2ZNIYDaas9Eox08+9CHQt6pQE6ZbYdK2KmvprP7eaiiOCydCUlscn8SlU1Hpe0u3WyEZZvuvmfA0O5GIPlf8X2aF8dDqMzAbxq2xoKKMqGYA4OrnjxGYDRedRjVdT7wXNpPRWn2G2ESatKnRMT2yhhCbviswuoT1oEajmrtFvBMxy0+kKQbHJ5pgd9KKb387eQ+x/zzLOlkVLgp8rEL1WyGWcCLG6RsRUh0olNlkCmF2J61K2Ny5ZFZaaIrBs2gSgGBUKl3KCTATHJ9UneRMfhVdArWgRUumt/CXk1+jqjYAl9eGaFCp3PMFTTEKCYwvpxQ0WiKB2ZaGEY9gbeEFuEUaEfDgePMZqCaBJaEDAaguDcC4oSqkB0E63pKJSK+G4pYFNIwgk0ZL/MBELH1/HJgN4+OuO5aG1dSQSaeaDiy6BGazbqUGYh0oPxMpNDbCEhVBSquNNCvBDCtsNFJTKPS8/S3DdQKzYYTYRGn4gSQefiGRSxD38vBjPLzC564DzVLwWh5+qUONB2WUjWxZ5jtAsb7o4ZMQtxFQZkwH5g55/Y1ghUlB7AearQPl0DpTKXVYFo2Rw1FdbmgfnC+mRlnDdaLB56o0EvuBhVbyxdSB0xfCRIdK6ShXpbGofmCpwYxJKwkdaAXMknhLzkQydWBjZw2Gvn7dtPZJYJZAlBW7Q+Alk8BidwiUhh9olkCQJeOZ2CFgzl44M5PVaCasWQJBzEAtK2zUhzNDArv6ahVBgRtn/5l3u0Zhig4kZV6FiwIALD+Kqx6E9w56sfuwU5eO3kGv4ljT7IN1UhRNBwrnukIm6Wf9AfgnI4oy+97yoeV7+gnh7X1eReqZVeGxovmB8kQhLTTuqsLAcIPqt92HnTj0iUeVWZZJoBV+YCbkg/c0O9HS7VaUoSkGdS32rMFQqySwJPbCaqlqR8404d61KBKxFNoPCGlwbp86DaEHMURYa+KJJbsXbu3ZguCDNUSgn2obYZP44s3F4hCWAUv8QADwf7UCYEE1WVJEe5+XeNdiVUTbkp0Ixycxd07IydbLe/Y0a7s1Iqw6U7FkLwysT8jUKJtXtunUKItbl8P/XxIob/PSqagi29QIxj8KGtrCmQ3LdKAcM2NLCNwVjFnHwRrV5HN5Nv/UKItI0PqIDmDSXjgfcHwSD68weHhlnYFqkOvKRX9CM5u1mKBoiuFJCKEpBpTzGXzfTZfEx3efqd6jzQU0xcC9MwWXV3te2evJrBcMM9uj6zhU1ZaltTn/j9xVRiaIGSgnSkQhJEBPVeTSZyFpNszAjQIxo7/QYyO2whsJYuRHi3mt++26oTMSvJQMJLkH9/1ffBs/G9qRd1/l5ZTtty9gLLVi31E3XnvdgUfXzVPGxcQLpLD9h5WwVfCo9ZVjc2M5Ukih56gHvC2F8L/Js/6J3Rg5fvB2AxIxDlOfKoOiGwUXToTg3vlfvPtlJ25eXIDdWf7N4xSsISttiIGt++3o6qvF8iMhfjcw3ICZsSWiDnsHvQBg+SMRcqwuCe6Xxyc8eBGYDRt20A3pQO92Bzr668HOrICdWUFHfz3RGy8AsKPHjfY+ryHiCgmOT6KqVhh+Y2cNWrrdON13P+3yOAly2spFghwSsRTmJ55gx14X3F5aU7JoipEuS5cKaIrB6hKH+YknqGurkv6XG6CB4QY8XeI0x5ZTMMHtpTF3Tghi1rVVwdelfRAkPidgxaMQ2cDxSXCLNL54c1FSSZlo6Xbrjo1YAgeGG+Dx2XHz4gIW/Yn0jNMsj+WIdQDhbYWpT4vrsB8505R2tyPEJtImURwDO7OC+HIKx8a2pdWv8jiyMlcEEQNpioHHZ0f1VgdO991XbLfUrsIDgnIWIyvszApJV6bC7WMyArLqccdLp6LY8w6H3pMtim96LynpMtDbZsPP/9SECJsEOxOUshD2HXVj74AX/smIFIqSQ87kqVEW9ybVY3bHxrZJkvHeVcGxTUSf43Tf/aw0HRvbljawwJzyMQhAyIBYDcVxa0zQYVoWdn5yBVOjLNr7vGkPX6iNTQ5NBtIUA5eXgqfZicDcAi6dikpi7/bS8DQ7ce18UNUfFMuthuKaSliQUEEy0qUlOwOrtzrSwltqJ3LiBCZi2kZApDV4Gxi/HcSOnvUzmsDdNV1fV1cC2etJjA/50XGwBscnmjDc8xC/utgIABgf8mN+Untpap150BSD8SE/dux14YOZnRgf8gMQJueDmZ24NRZMG3zvoFeSkNCDGK6dD6ouOxHyAynS51iufr4Iu1Poc35yRbeeJgM5PglEgemRNXQcrIHdSQsXZVw22J00pkfWdC87a2UMCA9IAI3f2YQqj0PywXa9wWCfx4HK2vX8F5piUFm7/lRAIvoc0yNr6D2ZvW+7k5aYmMkENcYIh13IKK89PmIr/Ndfs9hzqEaSjHuTsawzs6m+DB9e2w1AP+WC45NSopDeXbqnS+sS1dhZg/dvOPDnX97OeuU/EePSMsEGhhvQ0V+PP/x4FsHb6rQbDX8RMVDUEZHu9by+h1cK//SqnGEcn0yTSEBQD+z15DcveaQzUbxStvwoDm9bTlt+IhjaiUyPrGF6ZI741uXNiwu6zrNaO3PnkopcP5pi0hgamA3js/4AOJ4HoG5EPu66g95BL979slOX1lxBfFtTTV9ogTRbiuOTaS+8qbUr11fy07ldbzAA1idAfrwplo8EuYJmbhUkpC9KFWm7R840obVnC06+pp1hKrZ7it2l+l2tvpqEmznegigHowQGH6zB7dM/HBfbDcyGUb3VIRkJrfyZQp+JbLhDpWy616oxFM48FQilNtkv5aFSMUFV0O5Xb+nngf8BUt0zxPrVVgIAAAAASUVORK5CYII="
|
||||||
@ -48,19 +48,16 @@ func httpRouter() {
|
|||||||
// use gzip compression unless someone requests something with an explicit extension
|
// use gzip compression unless someone requests something with an explicit extension
|
||||||
router.Use(gzip.Gzip(gzip.DefaultCompression, gzip.WithExcludedPathsRegexs([]string{".*"})))
|
router.Use(gzip.Gzip(gzip.DefaultCompression, gzip.WithExcludedPathsRegexs([]string{".*"})))
|
||||||
|
|
||||||
|
|
||||||
// static html and such
|
// static html and such
|
||||||
// workaround the issue where the router tries to handle /*
|
// workaround the issue where the router tries to handle /*
|
||||||
// router.Static("/h", "../public")
|
// router.Static("/h", "../public")
|
||||||
|
|
||||||
|
|
||||||
router.GET("/favicon.ico", favIcon)
|
router.GET("/favicon.ico", favIcon)
|
||||||
router.GET("/", placeHolder)
|
router.GET("/", placeHolder)
|
||||||
|
|
||||||
|
|
||||||
imgR := router.Group("/i")
|
imgR := router.Group("/i")
|
||||||
{
|
{
|
||||||
imgR.GET("/", func(c *gin.Context) { c.String(200,"") })
|
imgR.GET("/", func(c *gin.Context) { c.String(200, "") })
|
||||||
// put looks nicer even though its actually POST
|
// put looks nicer even though its actually POST
|
||||||
imgR.POST("/put", imgPost)
|
imgR.POST("/put", imgPost)
|
||||||
imgR.GET("/:uid", imgView)
|
imgR.GET("/:uid", imgView)
|
||||||
@ -71,15 +68,15 @@ func httpRouter() {
|
|||||||
delR.GET("/i/:key", imgDel)
|
delR.GET("/i/:key", imgDel)
|
||||||
}
|
}
|
||||||
|
|
||||||
txtR := router.Group("/t")
|
// txtR := router.Group("/t")
|
||||||
{
|
// {
|
||||||
txtR.POST("/put", txtPost)
|
// txtR.POST("/put", txtPost)
|
||||||
}
|
// }
|
||||||
|
|
||||||
urlR := router.Group("/u")
|
// urlR := router.Group("/u")
|
||||||
{
|
// {
|
||||||
urlR.POST("/put", urlPost)
|
// urlR.POST("/put", urlPost)
|
||||||
}
|
// }
|
||||||
|
|
||||||
log.Info().Str("webIP", webIP).Str("webPort", webPort).Msg("done; tcp.ac is live.")
|
log.Info().Str("webIP", webIP).Str("webPort", webPort).Msg("done; tcp.ac is live.")
|
||||||
router.Run(webIP + ":" + webPort)
|
router.Run(webIP + ":" + webPort)
|
||||||
|
22
src/txt.go
22
src/txt.go
@ -83,11 +83,10 @@ func txtDel(c *gin.Context) {
|
|||||||
}
|
}
|
||||||
c.JSON(200, "DELETE_SUCCESS")
|
c.JSON(200, "DELETE_SUCCESS")
|
||||||
|
|
||||||
|
|
||||||
// it would be insane to try and delete the hash here
|
// it would be insane to try and delete the hash here
|
||||||
// if someone is uploading this text again after del
|
// if someone is uploading this text again after del
|
||||||
// and the file corresponding to the hash no longer exists
|
// and the file corresponding to the hash no longer exists
|
||||||
// we will delete the hash entry then and re-add then
|
// we will delete the hash entry then and re-add then
|
||||||
}
|
}
|
||||||
|
|
||||||
func txtView(c *gin.Context) {
|
func txtView(c *gin.Context) {
|
||||||
@ -135,28 +134,26 @@ func txtPost(c *gin.Context) {
|
|||||||
t := c.PostForm("txt")
|
t := c.PostForm("txt")
|
||||||
priv := c.PostForm("priv")
|
priv := c.PostForm("priv")
|
||||||
|
|
||||||
|
|
||||||
tbyte := []byte(t)
|
tbyte := []byte(t)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error().Err(err).Str("fn",fn).Msg("Oh?")
|
log.Error().Err(err).Str("fn", fn).Msg("Oh?")
|
||||||
errThrow(c, 500, "500", "500")
|
errThrow(c, 500, "500", "500")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(t) == 0 {
|
if len(t) == 0 {
|
||||||
log.Warn().Str("fn",fn).Msg("received an empty request")
|
log.Warn().Str("fn", fn).Msg("received an empty request")
|
||||||
errThrow(c, 400, "400", "400")
|
errThrow(c, 400, "400", "400")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.ContentType() != "text/plain" {
|
if c.ContentType() != "text/plain" {
|
||||||
log.Warn().Str("fn",fn).Str("ContentType", c.ContentType()).Msg("received a non-text content-type")
|
log.Warn().Str("fn", fn).Str("ContentType", c.ContentType()).Msg("received a non-text content-type")
|
||||||
errThrow(c, 400, "400", "400")
|
errThrow(c, 400, "400", "400")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// an optional switch for a privnote style burn after read
|
// an optional switch for a privnote style burn after read
|
||||||
// priv := c.GetBool("private")
|
// priv := c.GetBool("private")
|
||||||
|
|
||||||
@ -192,17 +189,17 @@ func txtPost(c *gin.Context) {
|
|||||||
log.Info().Str("func", fn).Msg("no duplicate txts found, generating uid and delete key")
|
log.Info().Str("func", fn).Msg("no duplicate txts found, generating uid and delete key")
|
||||||
|
|
||||||
// generate identifier and delete key based on configured sizes
|
// generate identifier and delete key based on configured sizes
|
||||||
uid := gouid.String(uidSize)
|
uid := gouid.String(uidSize, gouid.MixedCaseAlphaNum)
|
||||||
key := gouid.String(keySize)
|
key := gouid.String(keySize, gouid.MixedCaseAlphaNum)
|
||||||
|
|
||||||
// lets make sure that we don't clash even though its highly unlikely
|
// lets make sure that we don't clash even though its highly unlikely
|
||||||
for uidRef, _ := txtDB.Get([]byte(uid)); uidRef != nil; {
|
for uidRef, _ := txtDB.Get([]byte(uid)); uidRef != nil; {
|
||||||
log.Info().Str("func", fn).Msg("uid already exists! generating another...")
|
log.Info().Str("func", fn).Msg("uid already exists! generating another...")
|
||||||
uid = gouid.String(uidSize)
|
uid = gouid.String(uidSize, gouid.MixedCaseAlphaNum)
|
||||||
}
|
}
|
||||||
for keyRef, _ := keyDB.Get([]byte(key)); keyRef != nil; {
|
for keyRef, _ := keyDB.Get([]byte(key)); keyRef != nil; {
|
||||||
log.Info().Str("func", fn).Msg(" delete key already exists! generating another...")
|
log.Info().Str("func", fn).Msg(" delete key already exists! generating another...")
|
||||||
key = gouid.String(keySize)
|
key = gouid.String(keySize, gouid.MixedCaseAlphaNum)
|
||||||
}
|
}
|
||||||
|
|
||||||
// save checksum to db to prevent dupes in the future
|
// save checksum to db to prevent dupes in the future
|
||||||
@ -224,7 +221,6 @@ func txtPost(c *gin.Context) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
log.Debug().Str("func", fn).Str("uid", uid).Msg("saved to database successfully, sending to txtFin")
|
log.Debug().Str("func", fn).Str("uid", uid).Msg("saved to database successfully, sending to txtFin")
|
||||||
|
|
||||||
txtFin(c, uid, key)
|
txtFin(c, uid, key)
|
||||||
|
12
src/util.go
12
src/util.go
@ -1,8 +1,8 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/gin-gonic/gin"
|
|
||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
)
|
)
|
||||||
|
|
||||||
func errThrow(c *gin.Context, respcode int, Error string, msg string) {
|
func errThrow(c *gin.Context, respcode int, Error string, msg string) {
|
||||||
@ -13,9 +13,9 @@ func errThrow(c *gin.Context, respcode int, Error string, msg string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func b64d(str string) string {
|
func b64d(str string) string {
|
||||||
data, err := base64.StdEncoding.DecodeString(str)
|
data, err := base64.StdEncoding.DecodeString(str)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err.Error()
|
return err.Error()
|
||||||
}
|
}
|
||||||
return string(data)
|
return string(data)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user