Skip to content

Commit 331bc42

Browse files
committed
editoast: fga: add OpenFGA client lib
Signed-off-by: Leo Valais <[email protected]>
1 parent 0152d77 commit 331bc42

21 files changed

+2899
-11
lines changed

docker-compose.yml

+26
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,32 @@ services:
3939
interval: 5s
4040
retries: 20
4141

42+
openfga-migrate:
43+
depends_on:
44+
postgres: { condition: service_healthy }
45+
image: openfga/openfga:latest
46+
container_name: osrd-openfga-migrate
47+
command: migrate
48+
environment:
49+
OPENFGA_DATASTORE_ENGINE: "postgres"
50+
OPENFGA_DATASTORE_URI: "postgres://osrd:password@postgres:5432/osrd?search_path=openfga"
51+
52+
openfga:
53+
depends_on:
54+
openfga-migrate:
55+
condition: service_completed_successfully
56+
image: openfga/openfga:latest
57+
container_name: osrd-openfga
58+
environment:
59+
OPENFGA_DATASTORE_ENGINE: "postgres"
60+
OPENFGA_DATASTORE_URI: "postgres://osrd:password@postgres:5432/osrd?search_path=openfga"
61+
OPENFGA_HTTP_ADDR: "0.0.0.0:8091"
62+
OPENFGA_PLAYGROUND_PORT: 8092
63+
command: run
64+
ports:
65+
- "8091:8091" # http
66+
- "8092:8092" # playground
67+
4268
rabbitmq:
4369
image: rabbitmq:4-management
4470
container_name: osrd-rabbitmq

docker/docker-compose.host.yml

+12
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,18 @@ services:
99
ports: !reset []
1010
network_mode: host
1111

12+
openfga-migrate:
13+
ports: !reset []
14+
network_mode: host
15+
environment:
16+
OPENFGA_DATASTORE_URI: "postgres://osrd:password@localhost:5432/osrd?search_path=openfga"
17+
18+
openfga:
19+
ports: !reset []
20+
network_mode: host
21+
environment:
22+
OPENFGA_DATASTORE_URI: "postgres://osrd:password@localhost:5432/osrd?search_path=openfga"
23+
1224
editoast:
1325
ports: !reset []
1426
network_mode: host

docker/docker-compose.pr-tests.yml

+28-4
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,31 @@ services:
5454
networks:
5555
- pr-tests
5656

57+
openfga-migrate:
58+
image: openfga/openfga:latest
59+
container_name: osrd-openfga-migrate-pr-tests
60+
command: migrate
61+
environment:
62+
OPENFGA_DATASTORE_ENGINE: "postgres"
63+
OPENFGA_DATASTORE_URI: "postgres://osrd:password@postgres:5433/osrd?search_path=openfga"
64+
networks:
65+
- pr-tests
66+
67+
openfga:
68+
image: openfga/openfga:latest
69+
container_name: osrd-openfga-pr-tests
70+
environment:
71+
OPENFGA_DATASTORE_ENGINE: "postgres"
72+
OPENFGA_DATASTORE_URI: "postgres://osrd:password@postgres:5433/osrd?search_path=openfga"
73+
OPENFGA_HTTP_ADDR: "0.0.0.0:8191"
74+
OPENFGA_PLAYGROUND_PORT: 8192
75+
command: run
76+
ports:
77+
- "8191:8191" # http
78+
- "8192:8192" # playground
79+
networks:
80+
- pr-tests
81+
5782
rabbitmq:
5883
image: rabbitmq:4-management
5984
container_name: osrd-rabbitmq-pr-tests
@@ -94,10 +119,9 @@ services:
94119
valkey: { condition: service_healthy }
95120
rabbitmq: { condition: service_healthy }
96121
restart: unless-stopped
97-
ports: [ "8091:8091" ]
98122
environment:
99-
EDITOAST_PORT: 8091
100-
ROOT_URL: "http://localhost:8091"
123+
EDITOAST_PORT: 8090
124+
ROOT_URL: "http://osrd-editoast-pr-tests:8090"
101125
VALKEY_URL: "redis://valkey:6380"
102126
DATABASE_URL: "postgres://osrd:password@postgres:5433/osrd"
103127
TELEMETRY_KIND: "opentelemetry"
@@ -109,7 +133,7 @@ services:
109133
- -c
110134
- "diesel migration run && exec editoast runserver"
111135
healthcheck:
112-
test: [ "CMD", "curl", "-f", "http://localhost:8091/health" ]
136+
test: [ "CMD", "curl", "-f", "http://localhost:8090/health" ]
113137
start_period: 4s
114138
interval: 5s
115139
retries: 6

docker/gateway.pr-tests.simple.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ redirect_404_to_index = true
2020
[[targets]]
2121
tracing_name = "editoast"
2222
prefix = "/api"
23-
upstream = "http://osrd-editoast-pr-tests:8091"
23+
upstream = "http://editoast:8090"
2424
require_auth = true
2525

2626
[[targets]]

docker/init_db.sql

+5
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,18 @@ create database template_osrd WITH IS_TEMPLATE true;
66
-- Connect to template_osrd
77
\c template_osrd
88

9+
-- Create openfga schema
10+
create schema openfga;
11+
912
-- Enable required extensions
1013
create extension postgis;
1114
create extension pg_trgm;
1215
create extension unaccent;
1316

1417
-- Grant privileges to user
1518
grant all privileges on schema public to osrd;
19+
grant all privileges on schema openfga to osrd;
20+
1621

1722
-- Create osrd database using template_osrd
1823
create database osrd TEMPLATE template_osrd;

editoast/Cargo.lock

+58-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

editoast/Cargo.toml

+6
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ members = [
1313
"editoast_osrdyne_client",
1414
"editoast_schemas",
1515
"editoast_search",
16+
"fga",
17+
"fga_derive",
1618
"osm_to_railjson",
1719
]
1820

@@ -27,6 +29,7 @@ license = "LGPL-3.0"
2729
[workspace.dependencies]
2830
chrono = { version = "0.4.39", default-features = false, features = ["serde"] }
2931
clap = { version = "4.5", features = ["derive", "env"] }
32+
darling = "0.20"
3033
derivative = "2.2.0"
3134
diesel = { version = "2.2", default-features = false, features = [
3235
"32-column-tables",
@@ -66,9 +69,12 @@ paste = "1.0.15"
6669
postgis_diesel = { version = "2.4.1", features = ["serde"] }
6770
postgres-openssl = "0.5.1"
6871
pretty_assertions = "1.4.1"
72+
proc-macro2 = "1.0"
73+
quote = "1.0"
6974
rand = "0.9.0"
7075
rangemap = "1.5.1"
7176
regex = "1.11"
77+
syn = "2.0"
7278
# 0.12.0 to 0.12.4 have weird timeout issues https://github.com/seanmonstar/reqwest/issues/2283
7379
# This bug was introduced between 0.12.0 and 0.12.3.
7480
reqwest = { version = "0.11.27", features = ["json"] }

editoast/editoast_derive/Cargo.toml

+4-4
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@ edition.workspace = true
77
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
88

99
[dependencies]
10-
darling = "0.20"
10+
darling.workspace = true
1111
paste.workspace = true
12-
proc-macro2 = "1.0"
13-
quote = "1.0"
12+
proc-macro2.workspace = true
13+
quote.workspace = true
1414
serde_json.workspace = true
15-
syn = "2.0"
15+
syn.workspace = true
1616

1717
[lib]
1818
proc-macro = true

editoast/fga/Cargo.toml

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
[package]
2+
name = "fga"
3+
license.workspace = true
4+
version.workspace = true
5+
edition.workspace = true
6+
7+
[dependencies]
8+
fga_derive = { path = "../fga_derive" }
9+
futures.workspace = true
10+
futures-util.workspace = true
11+
itertools.workspace = true
12+
reqwest.workspace = true
13+
serde.workspace = true
14+
serde_json.workspace = true
15+
tempfile.workspace = true
16+
thiserror.workspace = true
17+
tokio.workspace = true
18+
tracing.workspace = true
19+
url.workspace = true
20+
21+
[dev-dependencies]
22+
derive_more = { version = "2.0.1", features = ["from"] }
23+
stdext = "0.3.3"
24+
tracing-subscriber.workspace = true

0 commit comments

Comments
 (0)