Giter VIP home page Giter VIP logo

nownabe / golink Goto Github PK

View Code? Open in Web Editor NEW
9.0 3.0 2.0 15.07 MB

A URL shortener for creating concise, memorable short links, suitable for organization-scoped use, such as in companies or schools.

Home Page: https://chrome.google.com/webstore/detail/golink/clecngohjeflemkblbfdfbjkjnigbjok

License: Apache License 2.0

Go 37.59% CSS 0.61% HTML 2.78% TypeScript 58.54% JavaScript 0.19% Shell 0.29%
chrome-extension go grpc react typescript

golink's Introduction

Golink (go/link)

A URL shortener for creating concise, memorable short links, suitable for organization-scoped use, such as in companies or schools.

golink-demo.mp4

Alternatives

Considering other options? Here are some similar platforms:

Golinks has the following advantages compared to these alternatives:

  • Self-hosted: You have full control of Golink backend.
  • Fully-managed: Golink can be built on fully-managed infrastructure.
  • Easy to deploy: You can complete to deploy Golink in just three simple steps.
  • Cost-effective: You can get started with Golink at no cost.
  • No DNS configuration: Redirect through the Golink Chrome extension.
  • Chrome extension with Manifest V3: Manifest V3 is more secure than V2 and V2 will be end-of-life.

Golink Origin

Golink originated from Google's internal short links. If you are curious about history of go/, dive into the stories on these websites:

Usage

For General Users

  1. Install the Golink Chrome Extension.
  2. Right-click the extension icon and select Options.
  3. Input your Golink URL and then click the Save button.

Setup for Administrators

Prerequisites

Additionally, you need to execute the following command:

gcloud auth login

Configure Your Project

Set your project ID:

gcloud config set project <YOUR-PROJECT-ID>

Deploy Applications

Clone this repository:

git clone https://github.com/nownabe/golink
cd golink

Run the deploy script. Replace <REGION> with one of App Engine regions.

./deploy.sh <REGION>

For instance:

./deploy.sh us-central1

Configure Identity-Aware Proxy

Begin by accessing the Google Cloud Console to set up the OAuth consent screen.

  1. Choose User Type.
    • Opt for a user type based on your needs. For exclusive access to members of your organization, select Internal. Note: choosing External doesn't mean open access. Users can't access your Golink unless you grant explicit permission.
  2. Enter App information
    • App name: Golink
    • User support email: Your email or a Google Group
    • Developer contact information: Your email or alternate contact emails
    • Finish by clicking SAVE AND CONTINUE
  3. You don't have to configure scopes.

Proceed to Identity-Aware Proxy. Turn on IAP for the App Engine app. If you encounter an error status before enabling, you can safely disregard it at this time.

Add Users

To make Golink accessible to all members of your organization, execute:

gcloud iap web add-iam-policy-binding \
  --role roles/iap.httpsResourceAccessor \
  --member domain:<YOUR-COMPANY-DOMAIN>

If you prefer to grant access on an individual basis:

gcloud iap web add-iam-policy-binding \
  --role roles/iap.httpsResourceAccessor \
  --member user:<EMAIL>

You have the option to specify Google Groups too:

gcloud iap web add-iam-policy-binding \
  --role roles/iap.httpsResourceAccessor \
  --member group:<EMAIL>

Examples:

gcloud iap web add-iam-policy-binding \
  --role roles/iap.httpsResourceAccessor \
  --member domain:your-company.example.com

gcloud iap web add-iam-policy-binding \
  --role roles/iap.httpsResourceAccessor \
  --member user:[email protected]

gcloud iap web add-iam-policy-binding \
  --role roles/iap.httpsResourceAccessor \
  --member group:[email protected]

Retrieve Your Golink URL

Determine your Golink URL with:

echo "https://$(gcloud app describe --format "get(defaultHostname)")"

Then notify your team members to enter this URL in Golink Chrome Extension Options. Enjoy using golinks!

Distribute Golink extension to your organization

You can enforce Golink Chrome extension to be installed in your organization members' browsers.

  1. Open https://admin.google.com and navigate to Devices > Chrome > Apps & extensions > Users & browsers.
  2. Click the yellow plus button at the bottom right and then click "add from Chrome Web Store".
  3. Enter clecngohjeflemkblbfdfbjkjnigbjok in the "View app by ID" textbox and click the "Select" button.
  4. Set "Permissions and URL access" to "Allow all permissions".

golink's People

Contributors

renovate[bot] avatar nownabe avatar

Stargazers

 avatar Shashi Suvarna avatar zawakin avatar SaltyEgg avatar ........ avatar Ross Derewianko avatar  avatar Jarrian Gojar avatar Kenta SUZUKI avatar

Watchers

 avatar  avatar  avatar

golink's Issues

Make counting redirect batches

Since Golink currently counts each redirect, every redirect costs additional read/write operatiosn for counting redirects.

Extension release automation

  1. action to make GitHub release: extension/manifest.release.json's version is changed -> make GitHub Release
  2. action to publish extension: new GitHub release is made -> publish extension to Chrome Web Store

Add prefix to assets

As now assets are hosted on /assets, users cannot make go/assets link, so I want to move assets to /-/assets

Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

Warning

These dependencies are deprecated:

Datasource Name Replacement PR?
npm @bufbuild/connect Unavailable
npm @bufbuild/connect-web Unavailable
npm eslint-config-standard-with-typescript Available

Open

These updates have all been created already. Click a checkbox below to force a retry/rebase of any.

Detected dependencies

asdf
.tool-versions
github-actions
.github/workflows/backend-ci.yaml
  • actions/checkout v4@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b
  • actions/setup-go v4@93397bea11091df50f3d7e59dc26a7711a8bcfbe
  • codecov/codecov-action v3@ab904c41d6ece82784817410c45d8b8c02684457
  • actions/checkout v4@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b
  • actions/setup-go v4@93397bea11091df50f3d7e59dc26a7711a8bcfbe
  • golangci/golangci-lint-action v3@3a919529898de77ec3da873e3063ca4b10e7f5cc
.github/workflows/conventional-commits.yaml
  • actions/checkout v4@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b
  • actions/setup-node v4@1e60f620b9541d16bece96c5465dc8ee9832be0b
.github/workflows/publish-extension.yaml
  • actions/checkout v4@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b
  • actions/setup-node v4@1e60f620b9541d16bece96c5465dc8ee9832be0b
gomod
backend/go.mod
  • go 1.21
  • cloud.google.com/go/compute/metadata v0.5.0
  • cloud.google.com/go/firestore v1.16.0
  • github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.19.1
  • github.com/bufbuild/connect-go v1.10.0
  • github.com/google/go-cmp v0.6.0
  • github.com/rs/cors v1.11.0
  • go.nownabe.dev/clog v0.0.0-20240208003331-02cb1ad137c2@02cb1ad137c2
  • go.opentelemetry.io/contrib/detectors/gcp v1.28.0
  • go.opentelemetry.io/otel v1.28.0
  • go.opentelemetry.io/otel/sdk v1.28.0
  • go.opentelemetry.io/otel/trace v1.28.0
  • golang.org/x/net v0.28.0
  • google.golang.org/api v0.191.0
  • google.golang.org/grpc v1.65.0
  • google.golang.org/protobuf v1.34.2
npm
console/package.json
  • @bufbuild/connect 0.13.0
  • @bufbuild/connect-web 0.13.0
  • @bufbuild/protobuf 1.10.0
  • @emotion/react 11.13.0
  • @emotion/styled 11.13.0
  • @fontsource/roboto 5.0.14
  • @mui/icons-material 5.16.7
  • @mui/material 5.16.7
  • react 18.3.1
  • react-dom 18.3.1
  • react-helmet 6.1.0
  • react-router-dom 6.26.0
  • @tanstack/eslint-plugin-query 4.38.0
  • @types/node 20.14.15
  • @types/react 18.3.3
  • @types/react-dom 18.3.0
  • @typescript-eslint/eslint-plugin 8.0.1
  • @typescript-eslint/parser 8.0.1
  • @vitejs/plugin-react 4.3.1
  • eslint 9.9.0
  • eslint-config-next 14.2.5
  • eslint-config-prettier 9.1.0
  • eslint-config-standard-with-typescript 43.0.1
  • eslint-plugin-import 2.29.1
  • eslint-plugin-n 17.10.2
  • eslint-plugin-prettier 5.2.1
  • eslint-plugin-promise 7.1.0
  • eslint-plugin-react 7.35.0
  • eslint-plugin-react-hooks 4.6.2
  • prettier 3.3.3
  • process 0.11.10
  • typescript 5.5.4
  • vite 4.5.3
  • vite-tsconfig-paths 4.3.2
  • pnpm 8.15.9
  • pnpm 8.15.9
extension/package.json
  • @bufbuild/connect 0.13.0
  • @bufbuild/connect-web 0.13.0
  • @bufbuild/protobuf 1.10.0
  • @types/chrome 0.0.269
  • parcel 2.12.0
  • process 0.11.10
  • typescript 5.5.4

  • Check this box to trigger a request for Renovate to run again on this repository

pre-release tasks

  • design doc
  • popup
    • authenticate
    • get url of the current tab
    • get title of the current tab
    • extract go link string from title
    • call CreateGolink method
    • list golinks
    • style
  • console
    • Display golinks not owned uneditable
    • Delete golink
  • Migrate console from Next.js to plain React
    • Migrate
    • get email from api
  • database
  • redirector
    • implement
  • api
    • logging
      • basic
      • labels
    • error handling
    • tracing
    • testing
    • CreateGolink
    • GetGolink
    • ListGolinks
    • ListGolinksByUrl
    • UpdateGolink
    • DeleteGolink
    • AddOwner
    • RemoveOwner
    • GetMe
  • icon
  • Deploy script
  • README

Continuous Integration

  • backend
    • test
    • lint
    • coverage
    • cache
  • extension
    • test
    • lint
    • coverage
  • console
    • test
    • lint
    • coverage

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.