Skip to content

An implementation of Go-Links, written in Kotlin

License

Notifications You must be signed in to change notification settings

ilya40umov/KotLink

Repository files navigation

KotLink

License Build Status codecov Docker Hub

KotLink is a solution for creating and sharing memorable URL aliases, which takes its inspiration from Google's internal Go-Links system.

Why use KotLink?

  • Get rid of bookmarks for URLs frequently used within your team
  • Speak the same language as your colleges (e.g. Matt, can you check out what is up with staging␣grafana?)
  • Search in your "intranet" quickly for a resource that you don't know the exact URL for

Overview

KotLink works by letting people install a tiny browser extension that activates when the person first types kk in the address bar and then presses space. While activated, the extension is providing autocomplete based on the database of aliases, and after the user has hit enter, it will redirect the user to the actual URL that matches the provided alias (or to the search page, if such an alias does not exist).

Suggestions In Address Bar

For example, if someone has already created an alias for vim shortcuts that maps to https://vim.rtorr.com, by typing kk␣vim␣shortcuts↵, the user will be redirected to the actual link.

Please beware that to make use of the browser extension, you will first need to set up a dedicated KotLink server, as it's going to store all the links / namespaces for your team.

Supported Browsers

Chrome and Firefox extensions require some configuration before they can be used.

Other Known Ways Of Using KotLink

With Vivaldi via manually registering KotLink as a search engine

MacOS and Alfred users can install this workflow (requires Node.js 8+ and the Alfred Powerpack):

npm install --global alfred-kotlink

KotLink Server

KotLink server requires an instance of PostgreSQL as the backend store, and encapsulates all the logic around storing / resolving URL aliases, as well as UI for creating / editing them.

Assuming you have Docker and docker-compose installed, you can run KotLink server on your machine for evaluation purposes with the following commands:

git clone https://github.com/ilya40umov/KotLink.git && cd KotLink
./gradlew bootRun

Alternatively, if you don't want to clone the repository, you can use the following set of commands:

docker network create kotlink-network

docker run --name kotlink-postgres \
  --network kotlink-network \
  -e POSTGRES_USER=kotlinkuser \
  -e POSTGRES_PASSWORD=kotlinkpass \
  -e POSTGRES_DB=kotlink \
  -d postgres:13.3

docker pull ilya40umov/kotlink

docker run --rm --name kotlink-server \
  --network kotlink-network -p 8080:8080 \
  -e SPRING_DATASOURCE_URL=jdbc:postgresql://kotlink-postgres:5432/kotlink \
  ilya40umov/kotlink

Now if you open http://localhost:8080/ you will be redirected to KotLink UI, which, after you have signed in with your Google account, will allow you to add namespaces and aliases.

List Aliases in UI

At this point, you can finally install the Kotlink browser extension, open its Options (Preferences in Firefox), and configure it to access your local KotLink server:

  • set KotLink Server URL to http://localhost:8080
  • set Extension Secret to your personal extension secret, which you will find at http://localhost:8080/ui/extension_secret).

Extension Options

Please, note that to allow accessing KotLink UI under your custom domain name / IP address, you will need to obtain OAuth 2.0 client credentials from Google API Console and provide them to your KotLink server via environment variables (see more on this in Deployment Guide). Through environment variables, you will also be able to restrict who can access your KotLink server.

When you are done evaluating, you can run the following command to clean up containers from your machine:

./gradlew composeDownForce

or if you chose the second approach:

docker rm -f kotlink-postgres && docker network rm kotlink-network

For the detailed instructions on how to permanently set up your own KotLink server, take a look at the Deployment Guide.

Engineering Guide

If you would like to contribute to the project, take a look at the Engineering Guide.