shortpaste

package module
v0.0.0-...-8577e33 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 13, 2023 License: MIT Imports: 18 Imported by: 0

README

Short{Paste}

Drone Build Status Docker pulls Docker Compose Go Report Demo on Heroku

Short{Paste} is open-source software written in Go and VueJS. It is a minimalistic shortener that combines three things that need shortening: links, files, and text. It is a self-hosted alternative to many popular services like paste bin and using dropbox to send a file to someone quickly.

The Go backend handles saving files, links, and text in DB and filesystem as needed, while the Vue UI provides a pretty view for you to add and review content. Added bonus, it tracks hit counts too!

Deployment

The whole backend packages to a single binary, and I bundled the app as a docker container based on alpine favored for its tiny size. To run this yourself, execute the command below.

docker run -d \
    -p 8080:8080 \
    -v ${PWD}/shortpaste/:/root/.shortpaste \
    adyanth/shortpaste:latest

The command will publish the application on port 8080, making it available on http://localhost:8080/ and use the bind-mounted folder called shortpaste in your current working directory to save the SQLite DB, the files, and texts published.

If you prefer docker-compose, here is an example deployment.

Build it yourself

With docker, you can build this yourself. A Dockerfile is provided at the root of this repository.

It uses a multi-stage build consisting of three stages:

  • Go Build : Builds a statically linked Go binary containing the backend API server and the static server.
  • Vue Build : Builds the VueJS UI to generate a dist folder with resources.
  • Container : Alpine container where the binary and dist are copied and served.

Environment Variables

You can customize the behavior using environment variables. Here is a list of configurable parameters.

Environment Variable Default Value Behaviour
SP_BIND_ADDR ":8080" Sets the bind-address inside the container.
PORT If set, it overrides the SP_BIND_ADDR to use the given port on all interfaces (support for Heroku deployment)
SP_STORAGE_PATH "~/.shortpaste" Sets the location for saving data inside the container.
SP_307_REDIRECT Setting this to anything causes a 307 redirect to be sent instead of showing the landing page for shortened links.
SP_USERNAME admin Sets the username to login to the UI (only applies to creating resources, links will still work fine)
SP_PASSWORD admin Sets the password to login to the UI (only applies to creating resources, links will still work fine)
SP_NOAUTH Setting this to anything bypasses authentication for creating resources.

Screenshots

Here are some screenshots to get a taste of it, see the demo for more :)

Type Create View
Links Link Upload Link View
Text Text Upload Text View
Files File Upload File View

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func IECFormat

func IECFormat(sizeBytes int64) string

IECFormat prints bytes in the International Electrotechnical Commission format

Types

type App

type App struct {
	// contains filtered or unexported fields
}

App struct containing the bind address, storage path and the db connector.

func NewApp

func NewApp(bind, storagePath, username, password string, noAuth, link307Redirect bool) App

NewApp creates a new App instance with the provided bind address and storage path

func (*App) Run

func (app *App) Run()

Run migrates the DB and starts the web server

type File

type File struct {
	ID            string `gorm:"primaryKey" json:"id" validate:"required,min=3,max=32,alphanumunicode"`
	Name          string `json:"name"`
	MIME          string `validate:"isdefault"`
	HitCount      int64  `json:"hitcount" validate:"isdefault"`
	DownloadCount int64  `json:"downloadcount" validate:"isdefault"`
	gorm.Model
}

File struct for saving the file uploads /f/.

type Link struct {
	ID       string `gorm:"primaryKey" json:"id" validate:"required,min=3,max=32,alphanumunicode"`
	Link     string `json:"link" validate:"required,url"`
	HitCount int64  `json:"hitcount" validate:"isdefault"`
	gorm.Model
}

Link struct for saving the Redirect Links /l/.

type Text

type Text struct {
	ID          string `gorm:"primaryKey" json:"id" validate:"required,min=3,max=32,alphanumunicode"`
	Type        string `validate:"omitempty,oneof=txt md" json:"type"`
	Text        string `gorm:"-" json:"text,omitempty"`
	NoHighlight bool   `json:"nohighlight"`
	HitCount    int64  `json:"hitcount" validate:"isdefault"`
	gorm.Model
}

Text struct for saving the text pastes /t/.

Directories

Path Synopsis
cmd

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL