4.2 KiB
Golang URL Shortener (Work in Progress)
Main Features:
- URL Shortening
- Visitor Counting
- URL deletion
- Authorization System
- High performance database with bolt
- ShareX integration
- Easy Docker Deployment
Server Installation
Standard
Since we don't provide prebuild binaries, you have to build it yourself. For that you need Golang and Git installed on your system.
git clone https://github.com/maxibanki/golang-url-shortener # Clone repository
cd golang-url-shortener # Go into it
go get -v ./... # Fetch dependencies
go build # Build executable
./golang-url-shortener # Run it
Docker Compose
Only execute the docker-compose.yml and adjust the environment variables to your needs.
Configuration:
The configuration is a yaml based file of key value pairs. It is located in the installation folder and is called config.yml:
{
"General": {
"DBPath": "main.db",
"ListenAddr": ":8080",
"ShortedIDLength": 4
},
"OAuth": {
"Google": {
"ClientID": "",
"ClientSecret": ""
}
}
}
Clients:
General
There is a mechanism integrated, that you can call the POST endpoints with the following techniques:
- application/json
- application/x-www-form-urlencoded
- multipart/form-data
ShareX Configuration
This URL Shortener has fully support with ShareX. To use it, just import the configuration to your ShareX. For that you need to open the Destination settings => Other / Custom uploaders => Import => From Clipboard menu.
After you've done this, you need to set it as your standard URL Shortener. For that go back into your main menu => Destinations => URL Shortener => Custom URL Shortener.
{
"Name": "Golang URL Shortener",
"DestinationType": "URLShortener",
"RequestType": "POST",
"RequestURL": "http://127.0.0.1:8080/api/v1/create",
"Arguments": {
"URL": "$input$"
},
"ResponseType": "Text",
"URL": "$json:URL$"
}
Curl
Create
curl -X POST -H 'Content-Type: application/json' -d '{"URL":"https://www.google.de/"}' http://127.0.0.1:8080/api/v1/create
{
"URL": "http://127.0.0.1:8080/dgUV",
}
Info
$ curl -X POST -H 'Content-Type: application/json' -d '{"ID":"dgUV"}' http://127.0.0.1:8080/api/v1/info
{
"URL": "https://google.com/",
"VisitCount": 1,
"CreatedOn": "2017-10-29T23:35:48.2977548+01:00",
"LastVisit": "2017-10-29T23:36:14.193236+01:00"
}
HTTP Endpoints:
/api/v1/create POST
Create is the handler for creating entries, you need to provide only an URL. The response will always be JSON encoded and contain an URL with the short link.
/api/v1/info POST
This handler returns the information about an entry. This includes:
- Created At
- Last Visit
- Visitor counter
For that you need to send a field ID to the backend.
Why did you built this?
Just only because I want to extend my current self hosted URL shorter and learn about new techniques like Go unit testing and react.
