#!/usr/bin/env racket #lang racket ; vim: ft=racket (require db crypto crypto/libcrypto net/base64) (when (file-exists? "version") (displayln "current directory contains data") (exit)) ; cache dirs (make-directory "cache") (make-directory "cache/actors") ; db dirs (make-directory "db") (make-directory "db/followers") (make-directory "db/comments") (make-directory "db/posted") ; actor keys (define PK-BEGIN "-----BEGIN PUBLIC KEY-----") (define PK-END "-----END PUBLIC KEY-----") (crypto-factories (list libcrypto-factory)) (define actor-key (generate-private-key 'rsa '((nbits 4096)))) (with-output-to-file "db/actorkey" (lambda () (write-bytes (pk-key->datum actor-key 'PrivateKeyInfo)) (void))) (with-output-to-file "db/actorkey.pub" (lambda () (write-bytes (string->bytes/utf-8 PK-BEGIN)) (write-bytes #"\n") (define pem (pk-key->datum actor-key 'SubjectPublicKeyInfo)) (write-bytes (base64-encode pem)) (write-bytes (string->bytes/utf-8 PK-END)) (void))) ; src and public (make-directory "src") ;; TODO ;; don't rly like preferences, so this is custom because i said so :P (define DEFAULT-PREFS '((shonks:instance-url "https://myinstance.tld/") (shonks:display-name "Display Name(tm)") (shonks:name "username"))) (with-output-to-file "src/instance.rktd" (lambda () (pretty-write DEFAULT-PREFS) (void))) (with-output-to-file "src/bio.md" (lambda () (write-string "this section left intentionally blank") (void))) (make-directory "src/posts") (make-directory "public") (make-directory "public/posts") (make-directory "public/tags") (make-directory "nginx") ; task queue (require "../private/taskq.rkt") (taskq-close (make-taskq "taskq.sqlite3" #t)) (with-output-to-file "version" (lambda () (write-string "1.0") (void))) (displayln "done")