Skip to content

Commit cba8d13

Browse files
committed
Fix connect to custom user server
1 parent d06f45a commit cba8d13

File tree

3 files changed

+101
-3
lines changed

3 files changed

+101
-3
lines changed

src/clj/vd_designer/aidbox.clj

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@
2929
[{:keys [box-url fhir-server-headers]}]
3030
(let [response @(martian/response-for (aidbox-client/aidbox-client box-url)
3131
:connect
32-
fhir-server-headers)]
32+
fhir-server-headers)
33+
response (update response :body (fn [b] (if (string? b) (json/parse-string b true) b)))]
3334
(cond
3435
(= 503 (:status response))
3536
{:status 400
@@ -39,6 +40,13 @@
3940
{:status 400
4041
:body {:error (str "Can't connect to " box-url)}}
4142

43+
(= "OperationOutcome" (get-in response [:body :resourceType]))
44+
{:status 404
45+
:body {:error (->> (get-in response [:body :issue])
46+
(map :diagnostics)
47+
(interpose "; ")
48+
(apply str))}}
49+
4250
:else
4351
(cond-> response
4452
(:body response)

src/clj/vd_designer/clients/aidbox.clj

Lines changed: 91 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,18 +88,108 @@
8888
:consumes ["application/json"]
8989
:method :get}])
9090

91+
(def custom-user-server-routes
92+
[{:route-name :connect
93+
:path-parts ["/ViewDefinition"]
94+
:produces ["application/json"]
95+
:consumes ["application/json"]
96+
:headers-schema {(s/optional-key :Cookie) s/Str
97+
(s/optional-key :Authorization) s/Str}
98+
:method :get}
99+
100+
{:route-name :get-view-definition
101+
:path-parts ["/ViewDefinition/" :vd-id]
102+
:path-schema {:vd-id s/Str}
103+
:headers-schema {(s/optional-key :Cookie) s/Str
104+
(s/optional-key :Authorization) s/Str}
105+
:produces ["application/json"]
106+
:consumes ["application/json"]
107+
:method :get}
108+
109+
{:route-name :create-view-definition
110+
:path-parts ["/ViewDefinition"]
111+
:headers-schema {(s/optional-key :Cookie) s/Str
112+
(s/optional-key :Authorization) s/Str}
113+
:produces ["application/json"]
114+
:consumes ["application/json"]
115+
:method :post
116+
:body-schema {:body s/Any}}
117+
118+
{:route-name :update-view-definition
119+
:path-parts ["/ViewDefinition/" :vd-id]
120+
:path-schema {:vd-id s/Str}
121+
:headers-schema {(s/optional-key :Cookie) s/Str
122+
(s/optional-key :Authorization) s/Str}
123+
:produces ["application/json"]
124+
:consumes ["application/json"]
125+
:method :put
126+
:body-schema {:body s/Any}}
127+
128+
{:route-name :delete-view-definition
129+
:path-parts ["/ViewDefinition/" :vd-id]
130+
:path-schema {:vd-id s/Str}
131+
:headers-schema {(s/optional-key :Cookie) s/Str
132+
(s/optional-key :Authorization) s/Str}
133+
:produces ["application/json"]
134+
:consumes ["application/json"]
135+
:method :delete}
136+
137+
{:route-name :view-definition-run
138+
:path-parts ["/ViewDefinition/$run"]
139+
:headers-schema {(s/optional-key :Cookie) s/Str
140+
(s/optional-key :Authorization) s/Str}
141+
:produces ["application/json"]
142+
:consumes ["application/json"]
143+
:method :post
144+
:body-schema {:body s/Any}}
145+
146+
{:route-name :get-view-definition-sql
147+
:path-parts ["/ViewDefinition/$sql"]
148+
:headers-schema {(s/optional-key :Cookie) s/Str
149+
(s/optional-key :Authorization) s/Str}
150+
:produces ["application/json"]
151+
:consumes ["application/json"]
152+
:method :post
153+
:body-schema {:body s/Any}}
154+
155+
{:route-name :rpc
156+
:path-parts ["/rpc"]
157+
:method :post
158+
;; use middleware for this?
159+
:headers-schema {(s/optional-key :Cookie) s/Str
160+
(s/optional-key :Authorization) s/Str}
161+
:produces ["application/json"]
162+
:consumes ["application/json"]
163+
:body-schema {:body {:method s/Symbol
164+
(s/optional-key :params) s/Any}}}
165+
166+
{:route-name :metadata
167+
:query-schema {:box-url s/Str}
168+
:path-parts ["/metadata"]
169+
:produces ["application/json"]
170+
:consumes ["application/json"]
171+
:method :get}])
172+
91173
(defn- aidbox-client* [url title]
92174
(martian/bootstrap
93175
url
94176
routes
95177
{:interceptors (concat [(interceptors/observability title)]
96178
martian-http/default-interceptors)}))
97179

180+
(defn- custom-server-client* [url title]
181+
(martian/bootstrap
182+
url
183+
custom-user-server-routes
184+
{:interceptors (concat [(interceptors/observability title)]
185+
martian-http/default-interceptors)}))
186+
187+
98188
(defn aidbox-portal-client [url]
99189
(aidbox-client* url "portal"))
100190

101191
(defn custom-server-client [url]
102-
(aidbox-client* url "custom-server"))
192+
(custom-server-client* url "custom-server"))
103193

104194
(defn aidbox-client [url]
105195
(cond

src/clj/vd_designer/web/middleware/aidbox_proxy.clj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
;; Verify that user has access to the server
2020
(when-let [user-server (user-server/get-by-account-id-and-box-url db (:id user) box-url)]
2121
(if (:user_servers/is_custom user-server)
22-
(:user_servers/headers user-server)
22+
(merge {} (:user_servers/headers user-server))
2323
{:Cookie (->> user-server
2424
:user_servers/aidbox_auth_token
2525
(format "aidbox-auth-token=%s;"))}))))

0 commit comments

Comments
 (0)