This solves some problems created by making the publicreport part of the communication API consistent. There are a lot of optimizations still on the table with this one, but for now I need to get this out. |
||
|---|---|---|
| api | ||
| arcgis-go@63cc8b5737 | ||
| auth | ||
| cmd/passwordgen | ||
| comms | ||
| config | ||
| db | ||
| debug | ||
| go-geojson2h3@c2ff1a96ab | ||
| h3utils | ||
| html | ||
| http | ||
| label-studio | ||
| llm | ||
| lob | ||
| middleware | ||
| minio | ||
| platform | ||
| postgrid/cmd/send-pdf | ||
| resource | ||
| rmo | ||
| scss | ||
| stadia | ||
| static | ||
| svg | ||
| sync | ||
| tomtom | ||
| tools | ||
| ts | ||
| vite | ||
| .air.toml | ||
| .gitattributes | ||
| .gitignore | ||
| .gitmodules | ||
| .prettierrc | ||
| build.js | ||
| default.nix | ||
| flake.lock | ||
| flake.nix | ||
| generate-icons.js | ||
| go.mod | ||
| go.sum | ||
| lefthook.yml | ||
| LICENSE | ||
| main.go | ||
| package.json | ||
| pnpm-lock.yaml | ||
| pnpm-workspace.yaml | ||
| query.go | ||
| README.md | ||
| start-air.sh | ||
| start-flogo.sh | ||
| start-nidus-sync.sh | ||
| start-nix-built.sh | ||
| tsconfig.json | ||
| version.go | ||
Nidus Sync
This is the software that powers Nidus Cloud Sync.
Administration
Password resets
If you need to manually reset a password you can do so with:
$ nix-shell -p genpass
$ genpass 12
abc123abc123
# this is from nidus, installed on deployment servers at the system layer
$ passwordgen
Please enter your password: abc123abc123
Password: abc123abc123
Hash: $2a$14$hdtoAtP7joczutY3bxaFqemBApH8xc5NbXLvDQqBfdzWV3jGSy4zi
$ psql -d nidus-sync
nidus-sync=> update user set password_hash='$2a$14$hdtoAtP7joczutY3bxaFqemBApH8xc5NbXLvDQqBfdzWV3jGSy4zi' where id=<something>;
Building from source
First, you'll need Nix.
Then:
nix develop
go build .
Building Custom Theme
We're using a customized Bootstrap theme for this site. You'll need to build the SCSS into CSS:
nix develop
sass --style=compressed --trace "$SASS_SRC_DIR/custom.scss":"$CSS_OUTPUT_DIR/bootstrap.css"
Running
You'll need a number of environment variables for configuring things;
- ARCGIS_CLIENT_ID - The client ID for ArcGIS oauth, configured with esri.
- ARCGIS_CLIENT_SECRET - The client secret for ArcGIS oauth, configured with esri.
- BASE_URL - The URL the site is hosted at, used for forming callback URLs. Should be complete like 'https://foo.bar'
- BIND - The address and port to bind to. Use ':9001' for 'any address, port 9001'
- ENVIRONMENT - either 'PRODUCTION' or 'DEVELOPMENT'. It's used to set things like oauth token length.
- MAPBOX_TOKEN - The token to use with mapbox which is important for rendering maps.
- POSTGRES_DSN - The DSN for connecting to the postgres database.
- FIELDSEEKER_SCHEMA_DIRECTORY - The directory to write fieldseeker schema files for debugging.
- USER_FILES_DIRECTORY - The directory for writing uploaded user data files (audio, images).
> BASE_URL=https://sync.nidus.cloud ARCGIS_CLIENT_ID=foo ARCGIS_CLIENT_SECRET=bar POSTGRES_DSN='postgresql://?host=/var/run/postgresql&dbname=nidus-sync' ./nidus-sync
Districts
There's a table containing district information in the database, import.district. It was created with:
psql
CREATE SCHEMA import;
shp2pgsql -s 3857 -c -D -I CA_districts.shp import.district | psql -d nidus-sync
psql -d nidus-sync
ALTER TABLE import.district ADD COLUMN geom_4326 geometry(MultiPolygon,4326) GENERATED ALWAYS AS (ST_Transform(geom, 4326)) STORED;
Hacking
air
This project uses air for fast compile-and-test loops. You can run it with:
> BASE_URL=https://sync.nidus.cloud ARCGIS_CLIENT_ID=foo ARCGIS_CLIENT_SECRET=bar POSTGRES_DSN='postgresql://?host=/var/run/postgresql&dbname=nidus-sync' air
bob
This uses the bob query framework. You can regenerate the models for bob with:
PSQL_DSN="postgresql://dbname?host=/var/run/postgresql&sslmode=disable" go run github.com/stephenafamo/bob/gen/bobgen-psql@latest"
PSQL_DSN="postgresql://?host=/var/run/postgresql&sslmode=disable&dbname=nidus-sync" go run github.com/stephenafamo/bob/gen/bobgen-psql@latest
This will generate a bunch of files. They're already committed, you only need this if you change the database schema in some way.
goose
This uses goose. You can use the goose command line to check status and make changes
> cd migrations
> GOOSE_DRIVER=postgres GOOSE_DBSTRING="dbname=nidus-sync sslmode=disable" goose status
> GOOSE_DRIVER=postgres GOOSE_DBSTRING="dbname=nidus-sync sslmode=disable" goose down
> GOOSE_DRIVER=postgres GOOSE_DBSTRING="dbname=nidus-sync sslmode=disable" goose up
svg icons
These icons are generated as part of the build system. You can generate them manually with:
pnpm generate-icons
This will produce an scss file at ts/gen/custom-icons.scss
typescript
In order to work on the TypeScript code you'll need to install the dependencies locally in your dev environment:
nix develop
pnpm install
You can then generate the TypeScript with:
pnpm watch
The only page that works right now is https://sync.nidus.cloud/template-test
watchexec
For iterating on styles
watchexec -e scss sass scss/custom.scss:static/gen/css/bootstrap.css