@bigbinary/neeto-unlisted-links-frontend
v0.1.4
Published
Frontend modal and hooks for managing unlisted links across neeto products.
Downloads
763
Readme
neeto-unlisted-links-engine
The neeto-unlisted-links-engine manages unlisted public links across neeto
products. An unlisted link is a secret, non-indexed URL that grants read-only
access to a specific resource (e.g. an article, project, board) without making
the resource globally public. Links can optionally auto-expire.
Contents
Development with Host Application
Engine
Installation
Add the gem to the host application's
Gemfile:gem "neeto-unlisted-links-engine"Install it:
bundle installCopy the migration files into your host application:
bin/rails generate neeto_unlisted_links_engine:installRun the migration:
bin/rails db:migrate
Usage
Include the Unlistable concern on any model whose records can have an unlisted
link. The model should belong_to an organization (or any object that responds
to root_url):
class Article < ApplicationRecord
include NeetoUnlistedLinksEngine::Unlistable
belongs_to :organization
endThe concern wires a has_one :unlisted_link association. You can read/generate
links through the NeetoUnlistedLinksEngine::LinksService:
service = NeetoUnlistedLinksEngine::LinksService.new(article)
service.generate_link
service.regenerate_link(expiration_type: "thirty_days",
expiration_date: 30.days.from_now)
service.update(status: "inactive")Public access
Wire a public-facing controller in the host application. The engine exposes a lookup method that returns the matching link if it is active and not expired:
class UnlistedLinksController < ApplicationController
def show
link = NeetoUnlistedLinksEngine::Link.resolve(params[:identifier])
@unlistable = link&.unlistable
return head(:not_found) unless @unlistable
render "articles/show"
end
end# config/routes.rb
get "/public/:identifier", to: "unlisted_links#show"Frontend package
The matching npm package is
@bigbinary/neeto-unlisted-links-frontend. It exports a modal that, given a
resource URL prefix, displays the unlisted link, its expiry state, and a
regenerate flow.
import { UnlistedLinks } from "@bigbinary/neeto-unlisted-links-frontend";
<UnlistedLinks
isOpen={isOpen}
onClose={onClose}
resourceUrl="/api/v1/admin/articles/123/unlisted_link"
/>;Instructions for Publishing
- Bump
lib/neeto_unlisted_links_engine/version.rb. - Update
CHANGELOG.md. gem build neeto-unlisted-links-engine.gemspec.gem push neeto-unlisted-links-engine-<version>.gem --host https://private-gems.neeto.com.- For the frontend package, bump
package.json, runyarn build, andnpm publish.
