Make linter happy and move to os from io/ioutil for reading/writing.
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
df5671586e
commit
2ec0e28243
@ -23,6 +23,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
### Changed
|
### Changed
|
||||||
|
|
||||||
* Updated bulma to v 0.7.5.
|
* Updated bulma to v 0.7.5.
|
||||||
|
* Moved from `io/ioutil` to `os` package for reading/writing files and directories.
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
//nolint:gofmt,gofumpt,goimports
|
||||||
package assets
|
package assets
|
||||||
|
|
||||||
import "embed"
|
import "embed"
|
||||||
|
@ -35,11 +35,11 @@ import (
|
|||||||
func dbNotAvailableGet(ec echo.Context) error {
|
func dbNotAvailableGet(ec echo.Context) error {
|
||||||
htmlData := templater.GetTemplate(ec, "database_not_available.html", nil)
|
htmlData := templater.GetTemplate(ec, "database_not_available.html", nil)
|
||||||
|
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return ec.HTML(http.StatusInternalServerError, htmlData)
|
return ec.HTML(http.StatusInternalServerError, htmlData)
|
||||||
}
|
}
|
||||||
|
|
||||||
func dbNotAvailableRawGet(ec echo.Context) error {
|
func dbNotAvailableRawGet(ec echo.Context) error {
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return ec.String(http.StatusInternalServerError, "Database not available\nSomething went wrong while trying to connect to database. Check logs for details.")
|
return ec.String(http.StatusInternalServerError, "Database not available\nSomething went wrong while trying to connect to database. Check logs for details.")
|
||||||
}
|
}
|
||||||
|
@ -39,7 +39,7 @@ func indexGet(ectx echo.Context) error {
|
|||||||
// We should check if database connection available.
|
// We should check if database connection available.
|
||||||
dbConn := ctx.Database.GetDatabaseConnection()
|
dbConn := ctx.Database.GetDatabaseConnection()
|
||||||
if ctx.Config.Database.Type != flatfiles.FlatFileDialect && dbConn == nil {
|
if ctx.Config.Database.Type != flatfiles.FlatFileDialect && dbConn == nil {
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return ectx.Redirect(http.StatusFound, "/database_not_available")
|
return ectx.Redirect(http.StatusFound, "/database_not_available")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -56,6 +56,6 @@ func indexGet(ectx echo.Context) error {
|
|||||||
|
|
||||||
htmlData := templater.GetTemplate(ectx, "index.html", map[string]string{"lexers": availableLexersSelectOpts, "captchaString": captchaString})
|
htmlData := templater.GetTemplate(ectx, "index.html", map[string]string{"lexers": availableLexersSelectOpts, "captchaString": captchaString})
|
||||||
|
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return ectx.HTML(http.StatusOK, htmlData)
|
return ectx.HTML(http.StatusOK, htmlData)
|
||||||
}
|
}
|
||||||
|
@ -92,7 +92,7 @@ func pasteGETWebInterface(ectx echo.Context) error {
|
|||||||
|
|
||||||
errtpl := templater.GetErrorTemplate(ectx, "Paste #"+pasteIDStr+" not found")
|
errtpl := templater.GetErrorTemplate(ectx, "Paste #"+pasteIDStr+" not found")
|
||||||
|
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return ectx.HTML(http.StatusBadRequest, errtpl)
|
return ectx.HTML(http.StatusBadRequest, errtpl)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -114,7 +114,7 @@ func pasteGETWebInterface(ectx echo.Context) error {
|
|||||||
if err == pasteExpired || err == pasteNotFound || err == pasteTimestampInvalid {
|
if err == pasteExpired || err == pasteNotFound || err == pasteTimestampInvalid {
|
||||||
errtpl := templater.GetErrorTemplate(ectx, "Paste #"+pasteIDRaw+" not found")
|
errtpl := templater.GetErrorTemplate(ectx, "Paste #"+pasteIDRaw+" not found")
|
||||||
|
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return ectx.HTML(http.StatusNotFound, errtpl)
|
return ectx.HTML(http.StatusNotFound, errtpl)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -123,7 +123,7 @@ func pasteGETWebInterface(ectx echo.Context) error {
|
|||||||
if err == pasteCookieInvalid {
|
if err == pasteCookieInvalid {
|
||||||
ctx.Logger.Info().Int("paste ID", pasteID).Msg("Invalid cookie, redirecting to auth page")
|
ctx.Logger.Info().Int("paste ID", pasteID).Msg("Invalid cookie, redirecting to auth page")
|
||||||
|
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return ectx.Redirect(http.StatusMovedPermanently, "/paste/"+pasteIDStr+"/"+ectx.Param("timestamp")+"/verify")
|
return ectx.Redirect(http.StatusMovedPermanently, "/paste/"+pasteIDStr+"/"+ectx.Param("timestamp")+"/verify")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -181,7 +181,7 @@ func pasteGETWebInterface(ectx echo.Context) error {
|
|||||||
// Get template and format it.
|
// Get template and format it.
|
||||||
pasteHTML := templater.GetTemplate(ectx, "paste.html", pasteData)
|
pasteHTML := templater.GetTemplate(ectx, "paste.html", pasteData)
|
||||||
|
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return ectx.HTML(http.StatusOK, pasteHTML)
|
return ectx.HTML(http.StatusOK, pasteHTML)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -200,7 +200,7 @@ func pastePasswordedVerifyGet(ectx echo.Context) error {
|
|||||||
|
|
||||||
errtpl := templater.GetErrorTemplate(ectx, "Paste #"+pasteIDRaw+" not found")
|
errtpl := templater.GetErrorTemplate(ectx, "Paste #"+pasteIDRaw+" not found")
|
||||||
|
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return ectx.HTML(http.StatusBadRequest, errtpl)
|
return ectx.HTML(http.StatusBadRequest, errtpl)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -216,7 +216,7 @@ func pastePasswordedVerifyGet(ectx echo.Context) error {
|
|||||||
if cookieValue == cookie.Value {
|
if cookieValue == cookie.Value {
|
||||||
ctx.Logger.Info().Msg("Valid cookie, redirecting to paste page...")
|
ctx.Logger.Info().Msg("Valid cookie, redirecting to paste page...")
|
||||||
|
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return ectx.Redirect(http.StatusMovedPermanently, "/paste/"+pasteIDRaw+"/"+ectx.Param("timestamp"))
|
return ectx.Redirect(http.StatusMovedPermanently, "/paste/"+pasteIDRaw+"/"+ectx.Param("timestamp"))
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -230,7 +230,7 @@ func pastePasswordedVerifyGet(ectx echo.Context) error {
|
|||||||
|
|
||||||
verifyHTML := templater.GetTemplate(ectx, "passworded_paste_verify.html", htmlData)
|
verifyHTML := templater.GetTemplate(ectx, "passworded_paste_verify.html", htmlData)
|
||||||
|
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return ectx.HTML(http.StatusOK, verifyHTML)
|
return ectx.HTML(http.StatusOK, verifyHTML)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -240,7 +240,7 @@ func pastePasswordedVerifyPost(ectx echo.Context) error {
|
|||||||
dbConn := ctx.Database.GetDatabaseConnection()
|
dbConn := ctx.Database.GetDatabaseConnection()
|
||||||
|
|
||||||
if ctx.Config.Database.Type != flatfiles.FlatFileDialect && dbConn == nil {
|
if ctx.Config.Database.Type != flatfiles.FlatFileDialect && dbConn == nil {
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return ectx.Redirect(http.StatusFound, "/database_not_available")
|
return ectx.Redirect(http.StatusFound, "/database_not_available")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -257,7 +257,7 @@ func pastePasswordedVerifyPost(ectx echo.Context) error {
|
|||||||
ctx.Logger.Error().Err(err1).Int("paste ID", pasteID).Msg("Failed to get paste")
|
ctx.Logger.Error().Err(err1).Int("paste ID", pasteID).Msg("Failed to get paste")
|
||||||
errtpl := templater.GetErrorTemplate(ectx, "Paste #"+strconv.Itoa(pasteID)+" not found")
|
errtpl := templater.GetErrorTemplate(ectx, "Paste #"+strconv.Itoa(pasteID)+" not found")
|
||||||
|
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return ectx.HTML(http.StatusBadRequest, errtpl)
|
return ectx.HTML(http.StatusBadRequest, errtpl)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -267,7 +267,7 @@ func pastePasswordedVerifyPost(ectx echo.Context) error {
|
|||||||
|
|
||||||
errtpl := templater.GetErrorTemplate(ectx, "Paste #"+strconv.Itoa(pasteID)+" not found")
|
errtpl := templater.GetErrorTemplate(ectx, "Paste #"+strconv.Itoa(pasteID)+" not found")
|
||||||
|
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return ectx.HTML(http.StatusBadRequest, errtpl)
|
return ectx.HTML(http.StatusBadRequest, errtpl)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -280,13 +280,13 @@ func pastePasswordedVerifyPost(ectx echo.Context) error {
|
|||||||
cookie.Expires = time.Now().Add(24 * time.Hour)
|
cookie.Expires = time.Now().Add(24 * time.Hour)
|
||||||
ectx.SetCookie(cookie)
|
ectx.SetCookie(cookie)
|
||||||
|
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return ectx.Redirect(http.StatusFound, "/paste/"+strconv.Itoa(pasteID)+"/"+timestampRaw)
|
return ectx.Redirect(http.StatusFound, "/paste/"+strconv.Itoa(pasteID)+"/"+timestampRaw)
|
||||||
}
|
}
|
||||||
|
|
||||||
errtpl := templater.GetErrorTemplate(ectx, "Invalid password. Please, try again.")
|
errtpl := templater.GetErrorTemplate(ectx, "Invalid password. Please, try again.")
|
||||||
|
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return ectx.HTML(http.StatusBadRequest, errtpl)
|
return ectx.HTML(http.StatusBadRequest, errtpl)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -296,7 +296,7 @@ func pasteRawGETWebInterface(ectx echo.Context) error {
|
|||||||
// We should check if database connection available.
|
// We should check if database connection available.
|
||||||
dbConn := ctx.Database.GetDatabaseConnection()
|
dbConn := ctx.Database.GetDatabaseConnection()
|
||||||
if ctx.Config.Database.Type != flatfiles.FlatFileDialect && dbConn == nil {
|
if ctx.Config.Database.Type != flatfiles.FlatFileDialect && dbConn == nil {
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return ectx.Redirect(http.StatusFound, "/database_not_available/raw")
|
return ectx.Redirect(http.StatusFound, "/database_not_available/raw")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -311,14 +311,14 @@ func pasteRawGETWebInterface(ectx echo.Context) error {
|
|||||||
if err1 != nil {
|
if err1 != nil {
|
||||||
ctx.Logger.Error().Err(err1).Int("paste ID", pasteID).Msg("Failed to get paste from database")
|
ctx.Logger.Error().Err(err1).Int("paste ID", pasteID).Msg("Failed to get paste from database")
|
||||||
|
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return ectx.HTML(http.StatusBadRequest, "Paste #"+pasteIDRaw+" does not exist.")
|
return ectx.HTML(http.StatusBadRequest, "Paste #"+pasteIDRaw+" does not exist.")
|
||||||
}
|
}
|
||||||
|
|
||||||
if paste.IsExpired() {
|
if paste.IsExpired() {
|
||||||
ctx.Logger.Error().Int("paste ID", pasteID).Msg("Paste is expired")
|
ctx.Logger.Error().Int("paste ID", pasteID).Msg("Paste is expired")
|
||||||
|
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return ectx.HTML(http.StatusBadRequest, "Paste #"+pasteIDRaw+" does not exist.")
|
return ectx.HTML(http.StatusBadRequest, "Paste #"+pasteIDRaw+" does not exist.")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -330,7 +330,7 @@ func pasteRawGETWebInterface(ectx echo.Context) error {
|
|||||||
if err2 != nil {
|
if err2 != nil {
|
||||||
ctx.Logger.Error().Err(err2).Int("paste ID", pasteID).Str("provided timestamp", tsProvidedStr).Msg("Invalid timestamp provided for getting private paste")
|
ctx.Logger.Error().Err(err2).Int("paste ID", pasteID).Str("provided timestamp", tsProvidedStr).Msg("Invalid timestamp provided for getting private paste")
|
||||||
|
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return ectx.String(http.StatusBadRequest, "Paste #"+pasteIDRaw+" not found")
|
return ectx.String(http.StatusBadRequest, "Paste #"+pasteIDRaw+" not found")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -338,12 +338,12 @@ func pasteRawGETWebInterface(ectx echo.Context) error {
|
|||||||
if tsProvided != pasteTS {
|
if tsProvided != pasteTS {
|
||||||
ctx.Logger.Error().Int("paste ID", pasteID).Int64("provided timestamp", tsProvided).Int64("paste timestamp", pasteTS).Msg("Incorrect timestamp provided for private paste")
|
ctx.Logger.Error().Int("paste ID", pasteID).Int64("provided timestamp", tsProvided).Int64("paste timestamp", pasteTS).Msg("Incorrect timestamp provided for private paste")
|
||||||
|
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return ectx.String(http.StatusBadRequest, "Paste #"+pasteIDRaw+" not found")
|
return ectx.String(http.StatusBadRequest, "Paste #"+pasteIDRaw+" not found")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// nolint
|
//nolint
|
||||||
// ToDo: figure out how to handle passworded pastes here.
|
// ToDo: figure out how to handle passworded pastes here.
|
||||||
// Return error for now.
|
// Return error for now.
|
||||||
if paste.Password != "" {
|
if paste.Password != "" {
|
||||||
@ -351,6 +351,6 @@ func pasteRawGETWebInterface(ectx echo.Context) error {
|
|||||||
return ectx.String(http.StatusBadRequest, "Paste #"+pasteIDRaw+" not found")
|
return ectx.String(http.StatusBadRequest, "Paste #"+pasteIDRaw+" not found")
|
||||||
}
|
}
|
||||||
|
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return ectx.String(http.StatusOK, paste.Data)
|
return ectx.String(http.StatusOK, paste.Data)
|
||||||
}
|
}
|
||||||
|
@ -24,7 +24,7 @@ func pastePOSTWebInterface(ectx echo.Context) error {
|
|||||||
// We should check if database connection available.
|
// We should check if database connection available.
|
||||||
dbConn := ctx.Database.GetDatabaseConnection()
|
dbConn := ctx.Database.GetDatabaseConnection()
|
||||||
if ctx.Config.Database.Type != flatfiles.FlatFileDialect && dbConn == nil {
|
if ctx.Config.Database.Type != flatfiles.FlatFileDialect && dbConn == nil {
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return ectx.Redirect(http.StatusFound, "/database_not_available")
|
return ectx.Redirect(http.StatusFound, "/database_not_available")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -34,7 +34,7 @@ func pastePOSTWebInterface(ectx echo.Context) error {
|
|||||||
|
|
||||||
errtpl := templater.GetErrorTemplate(ectx, "Cannot create empty paste")
|
errtpl := templater.GetErrorTemplate(ectx, "Cannot create empty paste")
|
||||||
|
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return ectx.HTML(http.StatusBadRequest, errtpl)
|
return ectx.HTML(http.StatusBadRequest, errtpl)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -46,7 +46,7 @@ func pastePOSTWebInterface(ectx echo.Context) error {
|
|||||||
|
|
||||||
errtpl := templater.GetErrorTemplate(ectx, "Empty pastes aren't allowed.")
|
errtpl := templater.GetErrorTemplate(ectx, "Empty pastes aren't allowed.")
|
||||||
|
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return ectx.HTML(http.StatusBadRequest, errtpl)
|
return ectx.HTML(http.StatusBadRequest, errtpl)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -55,7 +55,7 @@ func pastePOSTWebInterface(ectx echo.Context) error {
|
|||||||
|
|
||||||
errtpl := templater.GetErrorTemplate(ectx, "Invalid 'Paste should be available for' parameter passed. Please do not try to hack us ;).")
|
errtpl := templater.GetErrorTemplate(ectx, "Invalid 'Paste should be available for' parameter passed. Please do not try to hack us ;).")
|
||||||
|
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return ectx.HTML(http.StatusBadRequest, errtpl)
|
return ectx.HTML(http.StatusBadRequest, errtpl)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -65,11 +65,11 @@ func pastePOSTWebInterface(ectx echo.Context) error {
|
|||||||
|
|
||||||
errtpl := templater.GetErrorTemplate(ectx, "Invalid captcha solution.")
|
errtpl := templater.GetErrorTemplate(ectx, "Invalid captcha solution.")
|
||||||
|
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return ectx.HTML(http.StatusBadRequest, errtpl)
|
return ectx.HTML(http.StatusBadRequest, errtpl)
|
||||||
}
|
}
|
||||||
|
|
||||||
// nolint:exhaustruct
|
//nolint:exhaustruct
|
||||||
paste := &structs.Paste{
|
paste := &structs.Paste{
|
||||||
Title: params["paste-title"][0],
|
Title: params["paste-title"][0],
|
||||||
Data: params["paste-contents"][0],
|
Data: params["paste-contents"][0],
|
||||||
@ -103,7 +103,7 @@ func pastePOSTWebInterface(ectx echo.Context) error {
|
|||||||
|
|
||||||
errtpl := templater.GetErrorTemplate(ectx, "Invalid 'Paste should be available for' parameter passed. Please do not try to hack us ;).")
|
errtpl := templater.GetErrorTemplate(ectx, "Invalid 'Paste should be available for' parameter passed. Please do not try to hack us ;).")
|
||||||
|
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return ectx.HTML(http.StatusBadRequest, errtpl)
|
return ectx.HTML(http.StatusBadRequest, errtpl)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -144,7 +144,7 @@ func pastePOSTWebInterface(ectx echo.Context) error {
|
|||||||
|
|
||||||
errtpl := templater.GetErrorTemplate(ectx, "Failed to save paste. Please, try again later.")
|
errtpl := templater.GetErrorTemplate(ectx, "Failed to save paste. Please, try again later.")
|
||||||
|
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return ectx.HTML(http.StatusBadRequest, errtpl)
|
return ectx.HTML(http.StatusBadRequest, errtpl)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -153,10 +153,10 @@ func pastePOSTWebInterface(ectx echo.Context) error {
|
|||||||
|
|
||||||
// Private pastes have it's timestamp in URL.
|
// Private pastes have it's timestamp in URL.
|
||||||
if paste.Private {
|
if paste.Private {
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return ectx.Redirect(http.StatusFound, "/paste/"+newPasteIDAsString+"/"+strconv.FormatInt(paste.CreatedAt.Unix(), 10))
|
return ectx.Redirect(http.StatusFound, "/paste/"+newPasteIDAsString+"/"+strconv.FormatInt(paste.CreatedAt.Unix(), 10))
|
||||||
}
|
}
|
||||||
|
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return ectx.Redirect(http.StatusFound, "/paste/"+newPasteIDAsString)
|
return ectx.Redirect(http.StatusFound, "/paste/"+newPasteIDAsString)
|
||||||
}
|
}
|
||||||
|
@ -41,7 +41,7 @@ func pastesGET(ectx echo.Context) error {
|
|||||||
// We should check if database connection available.
|
// We should check if database connection available.
|
||||||
dbConn := ctx.Database.GetDatabaseConnection()
|
dbConn := ctx.Database.GetDatabaseConnection()
|
||||||
if ctx.Config.Database.Type != flatfiles.FlatFileDialect && dbConn == nil {
|
if ctx.Config.Database.Type != flatfiles.FlatFileDialect && dbConn == nil {
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return ectx.Redirect(http.StatusFound, "/database_not_available")
|
return ectx.Redirect(http.StatusFound, "/database_not_available")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -68,7 +68,7 @@ func pastesGET(ectx echo.Context) error {
|
|||||||
|
|
||||||
noPastesToShowTpl := templater.GetErrorTemplate(ectx, "No pastes to show.")
|
noPastesToShowTpl := templater.GetErrorTemplate(ectx, "No pastes to show.")
|
||||||
|
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return ectx.HTML(http.StatusOK, noPastesToShowTpl)
|
return ectx.HTML(http.StatusOK, noPastesToShowTpl)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -106,6 +106,6 @@ func pastesGET(ectx echo.Context) error {
|
|||||||
|
|
||||||
pasteListTpl := templater.GetTemplate(ectx, "pastelist_list.html", map[string]string{"pastes": pastesString, "pagination": paginationHTML})
|
pasteListTpl := templater.GetTemplate(ectx, "pastelist_list.html", map[string]string{"pastes": pastesString, "pagination": paginationHTML})
|
||||||
|
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return ectx.HTML(http.StatusOK, pasteListTpl)
|
return ectx.HTML(http.StatusOK, pasteListTpl)
|
||||||
}
|
}
|
||||||
|
@ -25,7 +25,6 @@
|
|||||||
package context
|
package context
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"io/ioutil"
|
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
|
||||||
@ -100,11 +99,11 @@ func (c *Context) LoadConfiguration() {
|
|||||||
|
|
||||||
c.Logger.Debug().Str("path", configPath).Msg("Configuration file path")
|
c.Logger.Debug().Str("path", configPath).Msg("Configuration file path")
|
||||||
|
|
||||||
// nolint:exhaustruct
|
//nolint:exhaustruct
|
||||||
c.Config = &config.Struct{}
|
c.Config = &config.Struct{}
|
||||||
|
|
||||||
// Read configuration file.
|
// Read configuration file.
|
||||||
fileData, err2 := ioutil.ReadFile(normalizedConfigPath)
|
fileData, err2 := os.ReadFile(normalizedConfigPath)
|
||||||
if err2 != nil {
|
if err2 != nil {
|
||||||
c.Logger.Panic().Err(err2).Msg("Failed to read configuration file")
|
c.Logger.Panic().Err(err2).Msg("Failed to read configuration file")
|
||||||
}
|
}
|
||||||
|
@ -31,6 +31,6 @@ const (
|
|||||||
|
|
||||||
// New creates new context.
|
// New creates new context.
|
||||||
func New() *Context {
|
func New() *Context {
|
||||||
// nolint:exhaustruct
|
//nolint:exhaustruct
|
||||||
return &Context{}
|
return &Context{}
|
||||||
}
|
}
|
||||||
|
@ -24,7 +24,7 @@ func (c *Context) getMemoryUsage(event *zerolog.Event, level zerolog.Level, mess
|
|||||||
// Initializes logger.
|
// Initializes logger.
|
||||||
func (c *Context) initializeLogger() {
|
func (c *Context) initializeLogger() {
|
||||||
// Устанавливаем форматирование логгера.
|
// Устанавливаем форматирование логгера.
|
||||||
// nolint:exhaustruct
|
//nolint:exhaustruct
|
||||||
output := zerolog.ConsoleWriter{Out: os.Stdout, NoColor: false, TimeFormat: time.RFC3339}
|
output := zerolog.ConsoleWriter{Out: os.Stdout, NoColor: false, TimeFormat: time.RFC3339}
|
||||||
output.FormatLevel = func(lvlRaw interface{}) string {
|
output.FormatLevel = func(lvlRaw interface{}) string {
|
||||||
var lvl string
|
var lvl string
|
||||||
|
@ -79,7 +79,7 @@ func (db *Database) cleanup() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (db *Database) DeletePaste(pasteID int) error {
|
func (db *Database) DeletePaste(pasteID int) error {
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return db.db.DeletePaste(pasteID)
|
return db.db.DeletePaste(pasteID)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -92,12 +92,12 @@ func (db *Database) GetDatabaseConnection() *sql.DB {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (db *Database) GetPaste(pasteID int) (*structs.Paste, error) {
|
func (db *Database) GetPaste(pasteID int) (*structs.Paste, error) {
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return db.db.GetPaste(pasteID)
|
return db.db.GetPaste(pasteID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (db *Database) GetPagedPastes(page int) ([]structs.Paste, error) {
|
func (db *Database) GetPagedPastes(page int) ([]structs.Paste, error) {
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return db.db.GetPagedPastes(page)
|
return db.db.GetPagedPastes(page)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -128,7 +128,7 @@ func (db *Database) RegisterDialect(di dialectinterface.Interface) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (db *Database) SavePaste(p *structs.Paste) (int64, error) {
|
func (db *Database) SavePaste(p *structs.Paste) (int64, error) {
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return db.db.SavePaste(p)
|
return db.db.SavePaste(p)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@ var (
|
|||||||
|
|
||||||
func New(cc *context.Context) {
|
func New(cc *context.Context) {
|
||||||
ctx = cc
|
ctx = cc
|
||||||
// nolint:exhaustruct
|
//nolint:exhaustruct
|
||||||
flf = &FlatFiles{}
|
flf = &FlatFiles{}
|
||||||
|
|
||||||
ctx.Database.RegisterDialect(dialectinterface.Interface(Handler{}))
|
ctx.Database.RegisterDialect(dialectinterface.Interface(Handler{}))
|
||||||
|
@ -27,7 +27,6 @@ package flatfiles
|
|||||||
import (
|
import (
|
||||||
"database/sql"
|
"database/sql"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"io/ioutil"
|
|
||||||
"os"
|
"os"
|
||||||
"os/user"
|
"os/user"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
@ -51,7 +50,7 @@ func (ff *FlatFiles) DeletePaste(pasteID int) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.Logger.Error().Err(err).Msg("Failed to delete paste!")
|
ctx.Logger.Error().Err(err).Msg("Failed to delete paste!")
|
||||||
|
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -85,25 +84,25 @@ func (ff *FlatFiles) GetPaste(pasteID int) (*structs.Paste, error) {
|
|||||||
pastePath := filepath.Join(ff.path, "pastes", strconv.Itoa(pasteID)+".json")
|
pastePath := filepath.Join(ff.path, "pastes", strconv.Itoa(pasteID)+".json")
|
||||||
ctx.Logger.Debug().Str("path", pastePath).Msg("Trying to load paste data")
|
ctx.Logger.Debug().Str("path", pastePath).Msg("Trying to load paste data")
|
||||||
|
|
||||||
pasteInBytes, err := ioutil.ReadFile(pastePath)
|
pasteInBytes, err := os.ReadFile(pastePath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.Logger.Debug().Err(err).Msg("Failed to read paste from storage")
|
ctx.Logger.Debug().Err(err).Msg("Failed to read paste from storage")
|
||||||
|
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx.Logger.Debug().Int("paste bytes", len(pasteInBytes)).Msg("Loaded paste")
|
ctx.Logger.Debug().Int("paste bytes", len(pasteInBytes)).Msg("Loaded paste")
|
||||||
ff.writeMutex.Unlock()
|
ff.writeMutex.Unlock()
|
||||||
|
|
||||||
// nolint:exhaustruct
|
//nolint:exhaustruct
|
||||||
paste := &structs.Paste{}
|
paste := &structs.Paste{}
|
||||||
|
|
||||||
err1 := json.Unmarshal(pasteInBytes, paste)
|
err1 := json.Unmarshal(pasteInBytes, paste)
|
||||||
if err1 != nil {
|
if err1 != nil {
|
||||||
ctx.Logger.Error().Err(err1).Msgf("Failed to parse paste")
|
ctx.Logger.Error().Err(err1).Msgf("Failed to parse paste")
|
||||||
|
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return nil, err1
|
return nil, err1
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -149,10 +148,10 @@ func (ff *FlatFiles) GetPagedPastes(page int) ([]structs.Paste, error) {
|
|||||||
ctx.Logger.Debug().Int("ID", paste.ID).Int("index", idx).Msg("Getting paste data")
|
ctx.Logger.Debug().Int("ID", paste.ID).Int("index", idx).Msg("Getting paste data")
|
||||||
|
|
||||||
// Get paste data.
|
// Get paste data.
|
||||||
// nolint:exhaustruct
|
//nolint:exhaustruct
|
||||||
pasteData := &structs.Paste{}
|
pasteData := &structs.Paste{}
|
||||||
|
|
||||||
pasteRawData, err := ioutil.ReadFile(filepath.Join(ff.path, "pastes", strconv.Itoa(paste.ID)+".json"))
|
pasteRawData, err := os.ReadFile(filepath.Join(ff.path, "pastes", strconv.Itoa(paste.ID)+".json"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.Logger.Error().Err(err).Msg("Failed to read paste data")
|
ctx.Logger.Error().Err(err).Msg("Failed to read paste data")
|
||||||
|
|
||||||
@ -236,7 +235,7 @@ func (ff *FlatFiles) Initialize() {
|
|||||||
if _, err := os.Stat(filepath.Join(ff.path, "pastes", "index.json")); err != nil {
|
if _, err := os.Stat(filepath.Join(ff.path, "pastes", "index.json")); err != nil {
|
||||||
ctx.Logger.Warn().Msg("Pastes index file does not exist, will create new one")
|
ctx.Logger.Warn().Msg("Pastes index file does not exist, will create new one")
|
||||||
} else {
|
} else {
|
||||||
indexData, err := ioutil.ReadFile(filepath.Join(ff.path, "pastes", "index.json"))
|
indexData, err := os.ReadFile(filepath.Join(ff.path, "pastes", "index.json"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.Logger.Fatal().Msg("Failed to read contents of index file!")
|
ctx.Logger.Fatal().Msg("Failed to read contents of index file!")
|
||||||
}
|
}
|
||||||
@ -253,7 +252,7 @@ func (ff *FlatFiles) Initialize() {
|
|||||||
func (ff *FlatFiles) SavePaste(paste *structs.Paste) (int64, error) {
|
func (ff *FlatFiles) SavePaste(paste *structs.Paste) (int64, error) {
|
||||||
ff.writeMutex.Lock()
|
ff.writeMutex.Lock()
|
||||||
// Write paste data on disk.
|
// Write paste data on disk.
|
||||||
filesOnDisk, _ := ioutil.ReadDir(filepath.Join(ff.path, "pastes"))
|
filesOnDisk, _ := os.ReadDir(filepath.Join(ff.path, "pastes"))
|
||||||
pasteID := len(filesOnDisk) + 1
|
pasteID := len(filesOnDisk) + 1
|
||||||
paste.ID = pasteID
|
paste.ID = pasteID
|
||||||
|
|
||||||
@ -263,20 +262,20 @@ func (ff *FlatFiles) SavePaste(paste *structs.Paste) (int64, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
ff.writeMutex.Unlock()
|
ff.writeMutex.Unlock()
|
||||||
|
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
err = ioutil.WriteFile(filepath.Join(ff.path, "pastes", strconv.Itoa(pasteID)+".json"), data, 0o600)
|
err = os.WriteFile(filepath.Join(ff.path, "pastes", strconv.Itoa(pasteID)+".json"), data, 0o600)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ff.writeMutex.Unlock()
|
ff.writeMutex.Unlock()
|
||||||
|
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add it to cache.
|
// Add it to cache.
|
||||||
// nolint:exhaustruct
|
//nolint:exhaustruct
|
||||||
indexData := Index{}
|
indexData := Index{}
|
||||||
indexData.ID = pasteID
|
indexData.ID = pasteID
|
||||||
indexData.Private = paste.Private
|
indexData.Private = paste.Private
|
||||||
@ -296,7 +295,7 @@ func (ff *FlatFiles) Shutdown() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
err1 := ioutil.WriteFile(filepath.Join(ff.path, "pastes", "index.json"), indexData, 0o600)
|
err1 := os.WriteFile(filepath.Join(ff.path, "pastes", "index.json"), indexData, 0o600)
|
||||||
if err1 != nil {
|
if err1 != nil {
|
||||||
ctx.Logger.Error().Err(err1).Msg("Failed to write index data to file. Pretty sure that you've lost your pastes.")
|
ctx.Logger.Error().Err(err1).Msg("Failed to write index data to file. Pretty sure that you've lost your pastes.")
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@ var (
|
|||||||
|
|
||||||
func New(cc *context.Context) {
|
func New(cc *context.Context) {
|
||||||
ctx = cc
|
ctx = cc
|
||||||
// nolint:exhaustruct
|
//nolint:exhaustruct
|
||||||
dbAdapter = &Database{}
|
dbAdapter = &Database{}
|
||||||
|
|
||||||
ctx.Database.RegisterDialect(dialectinterface.Interface(Handler{}))
|
ctx.Database.RegisterDialect(dialectinterface.Interface(Handler{}))
|
||||||
|
@ -38,7 +38,7 @@ func InitialUp(tx *sql.Tx) error {
|
|||||||
keep_for_unit_type int(1) NOT NULL DEFAULT 1 COMMENT 'Keep for unit type. 1 - minutes, 2 - hours, 3 - days, 4 - months.',
|
keep_for_unit_type int(1) NOT NULL DEFAULT 1 COMMENT 'Keep for unit type. 1 - minutes, 2 - hours, 3 - days, 4 - months.',
|
||||||
PRIMARY KEY (id), UNIQUE KEY id (id)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='Pastes';`)
|
PRIMARY KEY (id), UNIQUE KEY id (id)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='Pastes';`)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ import (
|
|||||||
func PasteLangUp(tx *sql.Tx) error {
|
func PasteLangUp(tx *sql.Tx) error {
|
||||||
_, err := tx.Exec("ALTER TABLE `pastes` ADD `language` VARCHAR(191) NOT NULL DEFAULT 'text' COMMENT 'Paste language'")
|
_, err := tx.Exec("ALTER TABLE `pastes` ADD `language` VARCHAR(191) NOT NULL DEFAULT 'text' COMMENT 'Paste language'")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -41,7 +41,7 @@ func PasteLangUp(tx *sql.Tx) error {
|
|||||||
func PasteLangDown(tx *sql.Tx) error {
|
func PasteLangDown(tx *sql.Tx) error {
|
||||||
_, err := tx.Exec("ALTER TABLE `pastes` DROP COLUMN `language`")
|
_, err := tx.Exec("ALTER TABLE `pastes` DROP COLUMN `language`")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ import (
|
|||||||
func PrivatePastesUp(tx *sql.Tx) error {
|
func PrivatePastesUp(tx *sql.Tx) error {
|
||||||
_, err := tx.Exec("ALTER TABLE `pastes` ADD `private` BOOL NOT NULL DEFAULT false COMMENT 'Private paste? If true - additional URL parameter (UNIX TIMESTAMP) of paste will be required to access.'")
|
_, err := tx.Exec("ALTER TABLE `pastes` ADD `private` BOOL NOT NULL DEFAULT false COMMENT 'Private paste? If true - additional URL parameter (UNIX TIMESTAMP) of paste will be required to access.'")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -41,7 +41,7 @@ func PrivatePastesUp(tx *sql.Tx) error {
|
|||||||
func PrivatePastesDown(tx *sql.Tx) error {
|
func PrivatePastesDown(tx *sql.Tx) error {
|
||||||
_, err := tx.Exec("ALTER TABLE `pastes` DROP COLUMN `private`")
|
_, err := tx.Exec("ALTER TABLE `pastes` DROP COLUMN `private`")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,13 +31,13 @@ import (
|
|||||||
func PasswordedPastesUp(txn *sql.Tx) error {
|
func PasswordedPastesUp(txn *sql.Tx) error {
|
||||||
_, err := txn.Exec("ALTER TABLE `pastes` ADD `password` varchar(64) NOT NULL DEFAULT '' COMMENT 'Password for paste (scrypted and sha256ed).'")
|
_, err := txn.Exec("ALTER TABLE `pastes` ADD `password` varchar(64) NOT NULL DEFAULT '' COMMENT 'Password for paste (scrypted and sha256ed).'")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err1 := txn.Exec("ALTER TABLE `pastes` ADD `password_salt` varchar(64) NOT NULL DEFAULT '' COMMENT 'Password salt (sha256ed).'")
|
_, err1 := txn.Exec("ALTER TABLE `pastes` ADD `password_salt` varchar(64) NOT NULL DEFAULT '' COMMENT 'Password salt (sha256ed).'")
|
||||||
if err1 != nil {
|
if err1 != nil {
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return err1
|
return err1
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -47,13 +47,13 @@ func PasswordedPastesUp(txn *sql.Tx) error {
|
|||||||
func PasswordedPastesDown(txn *sql.Tx) error {
|
func PasswordedPastesDown(txn *sql.Tx) error {
|
||||||
_, err := txn.Exec("ALTER TABLE `pastes` DROP COLUMN `password`")
|
_, err := txn.Exec("ALTER TABLE `pastes` DROP COLUMN `password`")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err1 := txn.Exec("ALTER TABLE `pastes` DROP COLUMN `password_salt`")
|
_, err1 := txn.Exec("ALTER TABLE `pastes` DROP COLUMN `password_salt`")
|
||||||
if err1 != nil {
|
if err1 != nil {
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return err1
|
return err1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -59,7 +59,7 @@ func (db *Database) DeletePaste(pasteID int) error {
|
|||||||
|
|
||||||
_, err := db.db.Exec(db.db.Rebind("DELETE FROM pastes WHERE id=?"), pasteID)
|
_, err := db.db.Exec(db.db.Rebind("DELETE FROM pastes WHERE id=?"), pasteID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -80,12 +80,12 @@ func (db *Database) GetDatabaseConnection() *sql.DB {
|
|||||||
func (db *Database) GetPaste(pasteID int) (*structs.Paste, error) {
|
func (db *Database) GetPaste(pasteID int) (*structs.Paste, error) {
|
||||||
db.check()
|
db.check()
|
||||||
|
|
||||||
// nolint:exhaustruct
|
//nolint:exhaustruct
|
||||||
paste := &structs.Paste{}
|
paste := &structs.Paste{}
|
||||||
|
|
||||||
err := db.db.Get(paste, db.db.Rebind("SELECT * FROM `pastes` WHERE id=?"), pasteID)
|
err := db.db.Get(paste, db.db.Rebind("SELECT * FROM `pastes` WHERE id=?"), pasteID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -108,7 +108,7 @@ func (db *Database) GetPagedPastes(page int) ([]structs.Paste, error) {
|
|||||||
|
|
||||||
err := db.db.Select(&pastesRaw, db.db.Rebind("SELECT * FROM `pastes` WHERE private != true ORDER BY id DESC LIMIT ? OFFSET ?"), ctx.Config.Pastes.Pagination, startPagination)
|
err := db.db.Select(&pastesRaw, db.db.Rebind("SELECT * FROM `pastes` WHERE private != true ORDER BY id DESC LIMIT ? OFFSET ?"), ctx.Config.Pastes.Pagination, startPagination)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -191,13 +191,13 @@ func (db *Database) SavePaste(p *structs.Paste) (int64, error) {
|
|||||||
|
|
||||||
result, err := db.db.NamedExec("INSERT INTO `pastes` (title, data, created_at, keep_for, keep_for_unit_type, language, private, password, password_salt) VALUES (:title, :data, :created_at, :keep_for, :keep_for_unit_type, :language, :private, :password, :password_salt)", p)
|
result, err := db.db.NamedExec("INSERT INTO `pastes` (title, data, created_at, keep_for, keep_for_unit_type, language, private, password, password_salt) VALUES (:title, :data, :created_at, :keep_for, :keep_for_unit_type, :language, :private, :password, :password_salt)", p)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
lastInsertID, err1 := result.LastInsertId()
|
lastInsertID, err1 := result.LastInsertId()
|
||||||
if err1 != nil {
|
if err1 != nil {
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@ var (
|
|||||||
|
|
||||||
func New(cc *context.Context) {
|
func New(cc *context.Context) {
|
||||||
ctx = cc
|
ctx = cc
|
||||||
// nolint:exhaustruct
|
//nolint:exhaustruct
|
||||||
dbAdapter = &Database{}
|
dbAdapter = &Database{}
|
||||||
|
|
||||||
ctx.Database.RegisterDialect(dialectinterface.Interface(Handler{}))
|
ctx.Database.RegisterDialect(dialectinterface.Interface(Handler{}))
|
||||||
|
@ -48,7 +48,7 @@ func InitialUp(tx *sql.Tx) error {
|
|||||||
COMMENT ON COLUMN pastes.keep_for_unit_type IS 'Keep for unit type. 0 - forever, 1 - minutes, 2 - hours, 3 - days, 4 - months.';
|
COMMENT ON COLUMN pastes.keep_for_unit_type IS 'Keep for unit type. 0 - forever, 1 - minutes, 2 - hours, 3 - days, 4 - months.';
|
||||||
`)
|
`)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ import (
|
|||||||
func PasteLangUp(tx *sql.Tx) error {
|
func PasteLangUp(tx *sql.Tx) error {
|
||||||
_, err := tx.Exec("ALTER TABLE pastes ADD COLUMN language VARCHAR(191) NOT NULL DEFAULT 'text'; COMMENT ON COLUMN pastes.language IS 'Paste language';")
|
_, err := tx.Exec("ALTER TABLE pastes ADD COLUMN language VARCHAR(191) NOT NULL DEFAULT 'text'; COMMENT ON COLUMN pastes.language IS 'Paste language';")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -41,7 +41,7 @@ func PasteLangUp(tx *sql.Tx) error {
|
|||||||
func PasteLangDown(tx *sql.Tx) error {
|
func PasteLangDown(tx *sql.Tx) error {
|
||||||
_, err := tx.Exec("ALTER TABLE pastes DROP COLUMN language")
|
_, err := tx.Exec("ALTER TABLE pastes DROP COLUMN language")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ import (
|
|||||||
func PrivatePastesUp(tx *sql.Tx) error {
|
func PrivatePastesUp(tx *sql.Tx) error {
|
||||||
_, err := tx.Exec("ALTER TABLE pastes ADD COLUMN private BOOLEAN NOT NULL DEFAULT false; COMMENT ON COLUMN pastes.private IS 'Private paste? If true - additional URL parameter (UNIX TIMESTAMP) of paste will be required to access.';")
|
_, err := tx.Exec("ALTER TABLE pastes ADD COLUMN private BOOLEAN NOT NULL DEFAULT false; COMMENT ON COLUMN pastes.private IS 'Private paste? If true - additional URL parameter (UNIX TIMESTAMP) of paste will be required to access.';")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -41,7 +41,7 @@ func PrivatePastesUp(tx *sql.Tx) error {
|
|||||||
func PrivatePastesDown(tx *sql.Tx) error {
|
func PrivatePastesDown(tx *sql.Tx) error {
|
||||||
_, err := tx.Exec("ALTER TABLE pastes DROP COLUMN private")
|
_, err := tx.Exec("ALTER TABLE pastes DROP COLUMN private")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,13 +31,13 @@ import (
|
|||||||
func PasswordedPastesUp(txn *sql.Tx) error {
|
func PasswordedPastesUp(txn *sql.Tx) error {
|
||||||
_, err := txn.Exec("ALTER TABLE pastes ADD COLUMN password VARCHAR(64) NOT NULL DEFAULT ''; COMMENT ON COLUMN pastes.password IS 'Password for paste (scrypted and sha256ed).';")
|
_, err := txn.Exec("ALTER TABLE pastes ADD COLUMN password VARCHAR(64) NOT NULL DEFAULT ''; COMMENT ON COLUMN pastes.password IS 'Password for paste (scrypted and sha256ed).';")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err1 := txn.Exec("ALTER TABLE pastes ADD COLUMN password_salt VARCHAR(64) NOT NULL DEFAULT ''; COMMENT ON COLUMN pastes.password_salt IS 'Password salt (sha256ed).';")
|
_, err1 := txn.Exec("ALTER TABLE pastes ADD COLUMN password_salt VARCHAR(64) NOT NULL DEFAULT ''; COMMENT ON COLUMN pastes.password_salt IS 'Password salt (sha256ed).';")
|
||||||
if err1 != nil {
|
if err1 != nil {
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return err1
|
return err1
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -47,13 +47,13 @@ func PasswordedPastesUp(txn *sql.Tx) error {
|
|||||||
func PasswordedPastesDown(txn *sql.Tx) error {
|
func PasswordedPastesDown(txn *sql.Tx) error {
|
||||||
_, err := txn.Exec("ALTER TABLE pastes DROP COLUMN password")
|
_, err := txn.Exec("ALTER TABLE pastes DROP COLUMN password")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err1 := txn.Exec("ALTER TABLE pastes DROP COLUMN password_salt")
|
_, err1 := txn.Exec("ALTER TABLE pastes DROP COLUMN password_salt")
|
||||||
if err1 != nil {
|
if err1 != nil {
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return err1
|
return err1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
|
|
||||||
package postgresql
|
package postgresql
|
||||||
|
|
||||||
// nolint:gci
|
//nolint:gci
|
||||||
import (
|
import (
|
||||||
"database/sql"
|
"database/sql"
|
||||||
"fmt"
|
"fmt"
|
||||||
@ -63,7 +63,7 @@ func (db *Database) DeletePaste(pasteID int) error {
|
|||||||
|
|
||||||
_, err := db.db.Exec(db.db.Rebind("DELETE FROM pastes WHERE id=?"), pasteID)
|
_, err := db.db.Exec(db.db.Rebind("DELETE FROM pastes WHERE id=?"), pasteID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -84,12 +84,12 @@ func (db *Database) GetDatabaseConnection() *sql.DB {
|
|||||||
func (db *Database) GetPaste(pasteID int) (*structs.Paste, error) {
|
func (db *Database) GetPaste(pasteID int) (*structs.Paste, error) {
|
||||||
db.check()
|
db.check()
|
||||||
|
|
||||||
// nolint:exhaustruct
|
//nolint:exhaustruct
|
||||||
paste := &structs.Paste{}
|
paste := &structs.Paste{}
|
||||||
|
|
||||||
err := db.db.Get(paste, db.db.Rebind("SELECT * FROM pastes WHERE id=$1"), pasteID)
|
err := db.db.Get(paste, db.db.Rebind("SELECT * FROM pastes WHERE id=$1"), pasteID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -119,7 +119,7 @@ func (db *Database) GetPagedPastes(page int) ([]structs.Paste, error) {
|
|||||||
|
|
||||||
err := db.db.Select(&pastesRaw, db.db.Rebind("SELECT * FROM pastes WHERE private != true ORDER BY id DESC LIMIT $1 OFFSET $2"), ctx.Config.Pastes.Pagination, startPagination)
|
err := db.db.Select(&pastesRaw, db.db.Rebind("SELECT * FROM pastes WHERE private != true ORDER BY id DESC LIMIT $1 OFFSET $2"), ctx.Config.Pastes.Pagination, startPagination)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -203,7 +203,7 @@ func (db *Database) SavePaste(paste *structs.Paste) (int64, error) {
|
|||||||
|
|
||||||
stmt, err := db.db.PrepareNamed("INSERT INTO pastes (title, data, created_at, keep_for, keep_for_unit_type, language, private, password, password_salt) VALUES (:title, :data, :created_at, :keep_for, :keep_for_unit_type, :language, :private, :password, :password_salt) RETURNING id")
|
stmt, err := db.db.PrepareNamed("INSERT INTO pastes (title, data, created_at, keep_for, keep_for_unit_type, language, private, password, password_salt) VALUES (:title, :data, :created_at, :keep_for, :keep_for_unit_type, :language, :private, :password, :password_salt) RETURNING id")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -211,7 +211,7 @@ func (db *Database) SavePaste(paste *structs.Paste) (int64, error) {
|
|||||||
|
|
||||||
err = stmt.Get(&newPasteID, paste)
|
err = stmt.Get(&newPasteID, paste)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,7 +37,7 @@ var (
|
|||||||
// New initializes database structure.
|
// New initializes database structure.
|
||||||
func New(cc *context.Context) {
|
func New(cc *context.Context) {
|
||||||
ctx = cc
|
ctx = cc
|
||||||
// nolint:exhaustruct
|
//nolint:exhaustruct
|
||||||
dbAdapter = &Database{}
|
dbAdapter = &Database{}
|
||||||
|
|
||||||
ctx.RegisterDatabaseInterface(databaseinterface.Interface(Handler{}))
|
ctx.RegisterDatabaseInterface(databaseinterface.Interface(Handler{}))
|
||||||
|
@ -42,13 +42,13 @@ func CreateHTML(currentPage int, pages int, linksBase string) string {
|
|||||||
var (
|
var (
|
||||||
ellipsisStartAdded = false
|
ellipsisStartAdded = false
|
||||||
ellipsisEndAdded = false
|
ellipsisEndAdded = false
|
||||||
// nolint:varnamelen
|
//nolint:varnamelen
|
||||||
i = 2
|
i = 2
|
||||||
)
|
)
|
||||||
|
|
||||||
for i <= pages {
|
for i <= pages {
|
||||||
// ToDo: fix it!
|
// ToDo: fix it!
|
||||||
// nolint:nestif
|
//nolint:nestif
|
||||||
if pages > 5 {
|
if pages > 5 {
|
||||||
if currentPage-3 < i && currentPage+3 > i || i == pages {
|
if currentPage-3 < i && currentPage+3 > i || i == pages {
|
||||||
paginationItemRaw := string(paginationLinkRaw)
|
paginationItemRaw := string(paginationLinkRaw)
|
||||||
|
@ -76,7 +76,7 @@ type Paste struct {
|
|||||||
func (p *Paste) CreatePassword(password string) error {
|
func (p *Paste) CreatePassword(password string) error {
|
||||||
// Create salt - random string.
|
// Create salt - random string.
|
||||||
// Yes, it is insecure. Should be refactored!
|
// Yes, it is insecure. Should be refactored!
|
||||||
// nolint:gosec
|
//nolint:gosec
|
||||||
seededRand := rand.New(rand.NewSource(time.Now().UnixNano()))
|
seededRand := rand.New(rand.NewSource(time.Now().UnixNano()))
|
||||||
saltBytes := make([]byte, 64)
|
saltBytes := make([]byte, 64)
|
||||||
|
|
||||||
@ -90,7 +90,7 @@ func (p *Paste) CreatePassword(password string) error {
|
|||||||
// Create crypted password and hash it.
|
// Create crypted password and hash it.
|
||||||
passwordCrypted, err := scrypt.Key([]byte(password), []byte(p.PasswordSalt), 131072, 8, 1, 64)
|
passwordCrypted, err := scrypt.Key([]byte(password), []byte(p.PasswordSalt), 131072, 8, 1, 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// nolint:wrapcheck
|
//nolint:wrapcheck
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user