1 /**
2 * Copyright © DiamondMVC 2019
3 * License: MIT (https://github.com/DiamondMVC/Diamond/blob/master/LICENSE)
4 * Author: Jacob Jensen (bausshf)
5 */
6 module diamond.controllers.attributes;
7 
8 import diamond.core.apptype;
9 
10 static if (isWeb)
11 {
12   import diamond.http.method;
13 
14   /// Attribute for default http actions.
15   struct HttpDefault {}
16 
17   /// Attribute for mandatory http actions.
18   struct HttpMandatory {}
19 
20   /// Attribute for http actions.
21   struct HttpAction
22   {
23     /// The http method of the action.
24     HttpMethod method;
25 
26     /// The name of the action. Equivalent to /route/{action}
27     string action;
28   }
29 
30   /// Attribute for a no-action handler.
31   struct HttpNoAction {}
32 
33   /// Attribute for authentication.
34   struct HttpAuthentication
35   {
36     /// The class to use for authentcation. It must implement IControllerAuth.
37     string authenticationClass;
38   }
39 
40   /// Attribute for restricting controller actions to the restricted ips.
41   struct HttpRestricted {}
42 
43   /// Attribute for disabling authentication.
44   struct HttpDisableAuth { }
45 
46   /// Attribute for version-control.
47   struct HttpVersion
48   {
49     /// The version name.
50     string versionName;
51 
52     /// The controller to use for the version.
53     string versionControllerClass;
54   }
55 
56   static if (isWebApi)
57   {
58     /// Attribute for declaring routes.
59     struct HttpRoutes
60     {
61       /// The routes.
62       string[] routes;
63 
64       /**
65       * Creates a new http routes attribute.
66       * Params:
67       *   route = The route.
68       */
69       this(string route)
70       {
71         routes = [route];
72       }
73 
74       /**
75       * Creates a new http routes attribute.
76       * Params:
77       *   routes = The routes.
78       */
79       this(string[] routes)
80       {
81         this.routes = routes;
82       }
83 
84       /// Dsiabling the regular struct constructor.
85       @disable this();
86     }
87   }
88 
89   /// Attribute for retrieving controller data from the form body.
90   struct HttpForm { }
91 
92   /// Attribute for retrieving controller data from the query string.
93   struct HttpQuery { }
94 
95   /// Attribute for sanitizing html tags from inputs by replacing them with their > and <
96   struct HttpSanitize { }
97 }