You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

68 lines
1.7 KiB

  1. # -*- mode: shell-script -*-
  2. PDS_LOCAL_DATADIR=/var/lib/bluesky
  3. PDS_DATADIR="$SERVICE_DATASTORE$PDS_LOCAL_DATADIR"
  4. PDS_ENV_FILE="$PDS_DATADIR/.env"
  5. bluesky:init() {
  6. local admin_password
  7. init-config-add "
  8. $SERVICE_NAME:
  9. env_file:
  10. - \"$PDS_ENV_FILE\"
  11. "
  12. [ -e "$PDS_ENV_FILE" ] && return
  13. admin_password=$(password:get admin internal 2>&1) || {
  14. err "Failed to get admin password" >&2
  15. e "$admin_password" | prefix " $GRAY|$NORMAL " >&2
  16. return 1
  17. }
  18. mkdir -p "${PDS_ENV_FILE%/*}"
  19. if ! plc_key=$(openssl ecparam --name secp256k1 --genkey --noout --outform DER 2>&1); then
  20. err "Failed to generate PLC key" >&2
  21. e "$plc_key" | prefix " $GRAY|$NORMAL " >&2
  22. return 1
  23. fi
  24. if ! plc_key=$(set -o pipefail
  25. echo "$plc_key" |
  26. tail --bytes=+8 |
  27. head --bytes=32 |
  28. xxd --plain --cols 32 2>&1
  29. ); then
  30. err "Failed to extract PLC key" >&2
  31. e "$plc_key" | prefix " $GRAY|$NORMAL " >&2
  32. return 1
  33. fi
  34. if ! jwt_secret=$(openssl rand -hex 16); then
  35. err "Failed to generate JWT secret" >&2
  36. e "$jwt_secret" | prefix " $GRAY|$NORMAL " >&2
  37. return 1
  38. fi
  39. cat > "$PDS_ENV_FILE" <<EOF
  40. PDS_JWT_SECRET=${jwt_secret}
  41. PDS_ADMIN_PASSWORD=${admin_password}
  42. PDS_PLC_ROTATION_KEY_K256_PRIVATE_KEY_HEX=${plc_key}
  43. PDS_DATA_DIRECTORY=${PDS_LOCAL_DATADIR}
  44. PDS_BLOBSTORE_DISK_LOCATION=${PDS_LOCAL_DATADIR}/blocks
  45. PDS_BLOB_UPLOAD_LIMIT=52428800
  46. PDS_DID_PLC_URL=https://plc.directory
  47. PDS_BSKY_APP_VIEW_URL=https://api.bsky.app
  48. PDS_BSKY_APP_VIEW_DID=did:web:api.bsky.app
  49. PDS_REPORT_SERVICE_URL=https://mod.bsky.app
  50. PDS_REPORT_SERVICE_DID=did:plc:ar7c4by46qjdydhdevvrndac
  51. PDS_CRAWLERS=https://bsky.network
  52. LOG_ENABLED=true
  53. EOF
  54. }