Aplicație de acces pentru serviciul de ANAF eFactura
| .clj-kondo | ||
| bin | ||
| conf | ||
| dev | ||
| dev-resources | ||
| docs | ||
| opa | ||
| public | ||
| resources | ||
| src/efactura_mea | ||
| templates | ||
| test/src/efactura_mea | ||
| .gitignore | ||
| bb.edn | ||
| build.clj | ||
| deps.edn | ||
| docker-bake.hcl | ||
| Dockerfile | ||
| README.md | ||
| tests.edn | ||
eFactura mea
Aplicație pentru interacțiune cu API ANAF pentru eFactură. Obiectivul inițial este de a descărca facturile urcate la ANAF. Ulterior vom analiza și urcarea.
Aplicația folosește limbajul Clojure și salvează datele intr-o bază de date sqlite și pe disc.
Are nevoie de:
- Java 21+ (OpenJDK)
- Clojure 1.12 +
- Open Policy Agent - pentru autorizare
- Docker
- qemu-system, binfmt-support pentru imagini multi platformă https://docs.docker.com/build/building/multi-platform/#qemu
Comenzi utile
# Construiește aplicația
clj -T:build uber
# Pornește aplicația local
# TODO:
./bin/efacturier.sh --help
./bin/efacturier.sh server
# Pornește un REPL pentru dezvoltare
clojure -Sdeps '{:deps {nrepl/nrepl {:mvn/version,"1.0.0"},cider/cider-nrepl {:mvn/version,"0.52.0"}}}' -M:dev -m nrepl.cmdline --middleware "[cider.nrepl/cider-middleware]"
# Rulează testele
clj -M:test
# Rulează testele pentru fiecare modificările
./bin/test.sh --watch
clj -M:test --watch
# Vezi actualizări pentru bibliotecile de funcții
clj -M:outdated
# Aplicăm migrații la baza de date
./bin/migratus.sh --config-file resources/migratus.edn create migration-name
# Aplicăm toate migrațiile
./bin/migratus.sh --config-file resources/migratus.edn migrate
# Aplicăm până la migratia <id>
./bin/migratus.sh --config-file resources/migratus.edn up <id>
# Dez-aplicăm migratia
./bin/migratus.sh --config-file resources/migratus.edn down <id>
Folosire cu Docker
# Construim imaginea docker
docker build -t efactura-mea . --load
# Avem nevoie de software pentru multi-platformă https://docs.docker.com/build/building/multi-platform/
# https://cloudolife.com/2022/03/05/Infrastructure-as-Code-IaC/Container/Docker/Docker-buildx-support-multiple-architectures-images/
apt install binfmt-support qemu-system qemu-system qemu-system-arm qemu-system-x86
# Construim imaginea folosind bake - imagini multi platforma
docker buildx bake --push --progress plain
# Pornim aplicația
docker run --rm \
-e DEBUG=y \
-e DATA__DIR="data" \
-p 8080:8080 -p 8123:8123 -v $PWD/data:/app/data \
efactura-mea
Autorizare cu Open Policy Agent
# Testăm politicile cu opa CLI
echo '{"method": "GET", "path": ["/"]}' | opa eval -f pretty -d opa/policies/efactura.rego -I 'data.efactura.allow'
# Fișierul json nu trebuie să conțină atributul "input" pentru CLI (da pentru curl)
opa eval -f pretty -d opa/policies/efactura.rego -i my-input.json 'data.efactura.allow'
# Testăm politica folosind curl - aici avem nevoie de atributul "input"
curl -v -H 'Content-type: application/json' http://localhost:8181/v1/data/efactura/allow -d '{"input": {"method": "GET", "path":["/"]}}'
# Pornim serverul OPA pentru aplicație
opa run -s --watch opa/policies/
# Compilăm politica de acces la WASM pentru folosire în aplicație
opa build -t wasm -e efactura/authz opa/policies/efactura.rego --output data/efactura-authz.tar.gz
mkdir -p data/efactura-authz
tar xzf data/efactura-authz.tar.gz -C data/efactura-authz
# Testăm politicile de autorizare
opa test -t wasm opa/policies/efactura_test.rego opa/policies/efactura.rego --var-values --explain fails