next.js, nginx, reverse-proxy, ssl
$ sudo apt-get update
$ sudo apt-get install nginx letsencrypt
import {Action, ActionCreator, Dispatch} from 'redux'; | |
import {ThunkAction} from 'redux-thunk'; | |
// Redux action | |
const reduxAction: ActionCreator<Action> = (text: string) => { | |
return { | |
type: SET_TEXT, | |
text | |
}; | |
}; |
overwrite: true | |
schema: "test.graphql" | |
documents: null | |
generates: | |
generated/test.py: | |
plugins: | |
- "lib/graphql-codegen-graphene.js" |
This document outlines how to model a common organization-based permission system in Hasura. Let's assume that you have some table structure like the following:
Table Name | Columns | Foreign Keys |
---|---|---|
User | id, name, email | |
Organization User | id, user_id, organization_id | user_id -> user.id, organization_id -> organization.id |
Organization | id, name |
CREATE TABLE accounts( | |
id serial PRIMARY KEY, | |
name VARCHAR(256) NOT NULL, | |
parent_id INTEGER REFERENCES section, | |
parent_path LTREE | |
); | |
CREATE INDEX account_parent_path_idx ON accounts USING GIST (parent_path); | |
CREATE INDEX account_parent_id_idx ON accounts (parent_id); |
You have to do 2 things in order to allow your container to access your host's postgresql database
Obs: By "Host" here I mean "the server where docker is running on".
Find your postgresql.conf (in case you don't know where it is)
$ sudo find / -type f -name postgresql.conf
version: '3.1' | |
services: | |
reverse-proxy: | |
image: traefik # The official Traefik docker image | |
command: --api --docker # Enables the web UI and tells Traefik to listen to docker | |
ports: | |
- "80:80" # The HTTP port | |
- "8080:8080" # The Web UI (enabled by --api) | |
volumes: | |
- /var/run/docker.sock:/var/run/docker.sock # So that Traefik can listen to the Docker events |
const { readFileSync } = require('fs'); | |
const { Renderer } = require('marked'); | |
const getMarked = require('md-to-pdf/lib/get-marked-with-highlighter'); | |
const renderer = new Renderer(); | |
const originalLinkRenderer = renderer.link.bind(renderer); | |
renderer.link = (href, title, text) => { | |
if (text !== 'include') { |
axios({ | |
url: 'http://localhost:5000/static/example.pdf', | |
method: 'GET', | |
responseType: 'blob', // important | |
}).then((response) => { | |
const url = window.URL.createObjectURL(new Blob([response.data])); | |
const link = document.createElement('a'); | |
link.href = url; | |
link.setAttribute('download', 'file.pdf'); | |
document.body.appendChild(link); |
export function serializeServerDataToJsonString(data: Object): string { | |
const jsonString = JSON.stringify(data); | |
return jsonString | |
.replace(/<\/script/gim, '</_escaped_script') | |
.replace(new RegExp('\u2028', 'g'), '\\u2028') | |
.replace(new RegExp('\u2029', 'g'), '\\u2029') | |
.replace(/\\/g, '\\\\') | |
.replace(/\n/g, '\\n') | |
.replace(/\r/g, '\\r') |