Skip to content

Commit

Permalink
Get rid of plugin system and multitenancy
Browse files Browse the repository at this point in the history
  • Loading branch information
jacobobryant committed Oct 28, 2020
1 parent b2b575f commit 9c448c4
Show file tree
Hide file tree
Showing 15 changed files with 208 additions and 286 deletions.
1 change: 0 additions & 1 deletion deps.edn
Expand Up @@ -15,7 +15,6 @@
mount/mount {:mvn/version "0.1.16"}
nrepl/nrepl {:mvn/version "0.5.3"}
orchestra/orchestra {:mvn/version "2019.02.06-1"}
org.clojure/java.classpath {:mvn/version "1.0.0"}
org.clojure/tools.namespace {:mvn/version "1.0.0"}
org.immutant/web {:mvn/version "2.1.10"}
org.postgresql/postgresql {:mvn/version "42.2.12.jre7"}
Expand Down
6 changes: 3 additions & 3 deletions example/config.edn
Expand Up @@ -6,8 +6,8 @@
:biff.crux.jdbc/port ...
; Uncomment to use filesystem storage in production instead of jdbc:
; :biff.crux/topology :standalone
:example.biff/host "example.com" ; change this
:example.mailgun/api-key "..."}
:biff/host "example.com" ; change this
:mailgun/api-key "..."}
:dev {:inherit [:prod]
:biff/dev true
:example.biff/host "localhost"}}
:biff/host "localhost"}}
5 changes: 3 additions & 2 deletions example/deps.edn
Expand Up @@ -3,8 +3,9 @@
thheller/shadow-cljs {:mvn/version "2.8.40"}
binaryage/devtools {:mvn/version "0.9.10"}
binaryage/oops {:mvn/version "0.7.0"}
cljs-http {:mvn/version "0.1.46"}}}}
cljs-http/cljs-http {:mvn/version "0.1.46"}}}}
:deps
{github-jacobobryant/biff
{:git/url "https://github.com/jacobobryant/biff"
{:local/root ".."
;:git/url "https://github.com/jacobobryant/biff"
:tag "HEAD"}}}
5 changes: 1 addition & 4 deletions example/src/example/client/app/db.cljs
Expand Up @@ -5,10 +5,7 @@
[rum.core]))

(defonce db (atom {}))

; same as (do (rum.core/cursor-in db [:sub-data]) ...)
(u/defcursors db
sub-data [:sub-data])
(defonce sub-data (atom {}))

; same as (do
; (rum.core/derived-atom [sub-data] :example.client.app.db/data
Expand Down
56 changes: 27 additions & 29 deletions example/src/example/core.clj
@@ -1,38 +1,36 @@
(ns ^:biff example.core
(ns example.core
(:require
[biff.system]
[biff.core :as biff]
[clojure.tools.namespace.repl :as tn]
[example.handlers]
[example.routes]
[example.rules]
[example.static]
[example.triggers]))
[example.handlers :refer [api]]
[example.routes :refer [routes]]
[example.rules :refer [rules]]
[example.static :refer [pages]]
[example.triggers :refer [triggers]]))

(defn send-email [opts]
(clojure.pprint/pprint [:send-email (select-keys opts [:to :template :data])]))

(defn start-example [sys]
(tn/set-refresh-dirs "src" "../../src")
(-> sys
(merge #:example.biff.auth{:send-email send-email
:on-signup "/signin/sent/"
:on-signin-request "/signin/sent/"
:on-signin-fail "/signin/fail/"
:on-signin "/app/"
:on-signout "/"})
(merge #:example.biff{:routes example.routes/routes
:static-pages example.static/pages
:event-handler #(example.handlers/api % (:?data %))
:rules example.rules/rules
:triggers example.triggers/triggers})
(biff.system/start-biff 'example)))
(defn start [opts]
(tn/set-refresh-dirs "src" "../../src") ; For hacking on Biff
(biff/start-spa
(merge opts
#:biff{:routes routes
:static-pages pages
:event-handler #(api % (:?data %))
:rules #'rules
:triggers #'triggers
:send-email send-email
:after-refresh `after-refresh})))

(def components
[{:name :example/core
:requires [:biff/init]
:required-by [:biff/web-server]
:start start-example}])
(defn -main []
(start {:biff/first-start true}))

(defn after-refresh []
(start nil))

(comment
(crux.api/submit-tx (:example.biff/node @biff.core/system)
[[:crux.tx/delete {:game/id "test"}]]))
; Useful REPL commands:
(biff.core/refresh)
(->> @biff.core/system keys sorted (run! prn))
)
4 changes: 2 additions & 2 deletions example/src/example/static.clj
Expand Up @@ -45,7 +45,7 @@

(def pages
{"/" home
"/signin/sent/" signin-sent
"/signin/fail/" signin-fail
"/signin-sent/" signin-sent
"/signin-fail/" signin-fail
"/app/" app
"/404.html" not-found})
12 changes: 4 additions & 8 deletions example/task
@@ -1,8 +1,6 @@
#!/bin/bash
set -e

APP_NS="example"
CLJS_APPS="app"
HOST="example.com"

setup () {
Expand All @@ -11,16 +9,14 @@ setup () {
}

dev () {
clj -Sresolve-tags
BIFF_ENV=dev clj -A:cljs "$@" -m biff.core
clj -X:deps git-resolve-tags
BIFF_ENV=dev clj -A:cljs "$@" -M -m example.core
}

compile-cljs () {
npx shadow-cljs release $CLJS_APPS
for app in $CLJS_APPS; do
mkdir -p resources/www/$APP_NS/cljs/$app
cp {www-dev,resources/www/$APP_NS}/cljs/$app/main.js
done
mkdir -p resources/www/cljs/app
cp {www-dev,resources/www}/cljs/app/main.js
}

push-config () {
Expand Down
3 changes: 3 additions & 0 deletions slate/source/index.html.md
Expand Up @@ -61,6 +61,9 @@ For hacking on Biff, change the example project's dependency to `:local/root

# Getting started

**Note:** As of 19 Oct, the `./task dev` command below is broken due to a bug
in tools.deps. I'll update these docs with a workaround soon.

The fastest way to get started with Biff is by cloning the Github repo and running the
official example project (an implementation of Tic Tac Toe):

Expand Down
23 changes: 13 additions & 10 deletions src/biff/auth.clj
@@ -1,20 +1,20 @@
(ns biff.auth
(:require
[crux.api :as crux]
[ring.middleware.anti-forgery :as anti-forgery]
[biff.crux :as bcrux]
[byte-streams :as bs]
[byte-transforms :as bt]
[cemerick.url :as url]
[clojure.string :as str]
[crux.api :as crux]
[crypto.random :as random]
[trident.util :as u]
[ring.middleware.anti-forgery :as anti-forgery]
[trident.jwt :as tjwt]
[clojure.string :as str]
[cemerick.url :as url]
[byte-transforms :as bt]))
[trident.util :as u]))

(defn get-key [{:keys [biff/node biff/db k] :as env}]
(or (get (crux/entity db :biff.auth/keys) k)
(doto (bs/to-string (bt/encode (random/bytes 16) :base64))
(#(bcrux/submit-admin-tx
(#(bcrux/submit-tx
env
{[:biff/auth-keys :biff.auth/keys]
{:db/merge true
Expand Down Expand Up @@ -43,8 +43,11 @@
(defn email= [s1 s2]
(.equalsIgnoreCase s1 s2))

(defn send-signin-link [{:keys [params/email biff/base-url template location]
:biff.auth/keys [send-email]
(defn send-signin-link [{:keys [params/email
biff/base-url
biff/send-email
template
location]
:as env}]
(let [{:keys [params] :as env} (update env :params
(fn [m] (u/map-vals
Expand Down Expand Up @@ -118,7 +121,7 @@
["/api"
["/signup" {:post #(send-signin-link (assoc %
:template :biff.auth/signup
:location (or on-signup on-signin-request)))
:location on-signup))
:name ::signup}]
["/signin-request" {:post #(send-signin-link (assoc %
:template :biff.auth/signin
Expand Down

0 comments on commit 9c448c4

Please sign in to comment.