1
1
package io .kroki .server .service ;
2
2
3
+ import io .kroki .server .error .MethodNotAllowedException ;
4
+ import io .kroki .server .error .UnsupportedFormatException ;
3
5
import io .kroki .server .response .Caching ;
6
+ import io .vertx .core .http .HttpMethod ;
4
7
import io .vertx .ext .web .Router ;
5
8
import io .vertx .ext .web .handler .BodyHandler ;
6
9
7
10
import java .util .HashMap ;
11
+ import java .util .List ;
8
12
import java .util .Map ;
9
13
import java .util .Set ;
10
14
import java .util .stream .Collectors ;
11
15
12
16
public class DiagramRegistry {
13
17
14
- private Map <String , DiagramHandler > registry = new HashMap <>();
18
+ private final Map <String , DiagramHandler > registry = new HashMap <>();
15
19
private final Router router ;
16
20
private final BodyHandler bodyHandler ;
17
21
@@ -27,10 +31,33 @@ public void register(DiagramService diagramService, String... names) {
27
31
router .get ("/" + name + "/:output_format/:source_encoded" )
28
32
.handler (diagramHandler .createRequestReceived (name ))
29
33
.handler (diagramHandler .createGet (name ));
34
+ router .route ("/" + name )
35
+ .handler (event -> {
36
+ if (HttpMethod .POST .equals (event .request ().method ())) {
37
+ event .next ();
38
+ return ;
39
+ }
40
+ event .fail (405 , new MethodNotAllowedException (List .of ("POST" )));
41
+ });
30
42
router .post ("/" + name )
31
43
.handler (bodyHandler )
32
44
.handler (diagramHandler .createRequestReceived (name ))
33
45
.handler (diagramHandler .createPost (name ));
46
+ router .route ("/" + name + "/:output_format" )
47
+ .handler (event -> {
48
+ if (HttpMethod .POST .equals (event .request ().method ())) {
49
+ event .next ();
50
+ return ;
51
+ }
52
+ String outputFormat = event .pathParam ("output_format" );
53
+ try {
54
+ diagramHandler .validate (name , outputFormat );
55
+ } catch (UnsupportedFormatException e ) {
56
+ event .fail (e );
57
+ return ;
58
+ }
59
+ event .fail (405 , new MethodNotAllowedException (List .of ("POST" )));
60
+ });
34
61
router .post ("/" + name + "/:output_format" )
35
62
.handler (bodyHandler )
36
63
.handler (diagramHandler .createRequestReceived (name ))
0 commit comments