View Javadoc
1   /*
2    * This file is part of Waarp Project (named also Waarp or GG).
3    *
4    *  Copyright (c) 2019, Waarp SAS, and individual contributors by the @author
5    *  tags. See the COPYRIGHT.txt in the distribution for a full listing of
6    * individual contributors.
7    *
8    *  All Waarp Project is free software: you can redistribute it and/or
9    * modify it under the terms of the GNU General Public License as published by
10   * the Free Software Foundation, either version 3 of the License, or (at your
11   * option) any later version.
12   *
13   * Waarp is distributed in the hope that it will be useful, but WITHOUT ANY
14   * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
15   * A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16   *
17   *  You should have received a copy of the GNU General Public License along with
18   * Waarp . If not, see <http://www.gnu.org/licenses/>.
19   */
20  package org.waarp.gateway.kernel;
21  
22  import io.netty.handler.codec.http.HttpResponseStatus;
23  import io.netty.handler.codec.http.multipart.DefaultHttpDataFactory;
24  import io.netty.handler.codec.http.multipart.DiskAttribute;
25  import io.netty.handler.codec.http.multipart.DiskFileUpload;
26  import io.netty.handler.codec.http.multipart.HttpDataFactory;
27  import org.waarp.gateway.kernel.AbstractHttpField.FieldPosition;
28  import org.waarp.gateway.kernel.AbstractHttpField.FieldRole;
29  import org.waarp.gateway.kernel.HttpPage.PageRole;
30  
31  import java.net.SocketAddress;
32  import java.util.LinkedHashMap;
33  import java.util.Map;
34  
35  /**
36   *
37   */
38  public abstract class HttpBusinessFactory {
39    public static final HttpDataFactory factory =
40        new DefaultHttpDataFactory(DefaultHttpDataFactory.MINSIZE);
41    // Disk if size exceed MINSIZE = 16K, but for FileUpload from Ark directly
42    // XXX FIXME TODO to setup outside !
43    public static String TempPath = "J:/GG/ARK/TMP";
44  
45    /**
46     * Initialize the Disk support
47     */
48    public static void initialize(final String tempPath) {
49      TempPath = tempPath;
50      DiskFileUpload.deleteOnExitTemporaryFile = true; // should delete file
51      // on exit (in normal
52      // exit)
53      DiskFileUpload.baseDirectory = TempPath; // system temp
54      // directory
55      DiskAttribute.deleteOnExitTemporaryFile = true; // should delete file on
56      // exit (in normal exit)
57      DiskAttribute.baseDirectory = TempPath; // system temp directory
58    }
59  
60    /**
61     * It returns the AbstractHttpBusinessRequest to use during a new request.
62     * <p>
63     * Note that fields given in parameter should be updated according to their
64     * values if needed.
65     *
66     * @param remoteAddress the remote SocketAddress in use
67     * @param fields the fields linked hashmap (to preserver order) to
68     *     set for
69     *     the new request
70     * @param page source HttpPage
71     *
72     * @return the AbstractHttpBusinessRequest to use during a new request
73     */
74    public abstract AbstractHttpBusinessRequest getNewHttpBusinessRequest(
75        SocketAddress remoteAddress, Map<String, AbstractHttpField> fields,
76        HttpPage page);
77  
78    /**
79     * @param pages
80     * @param title
81     * @param clasz
82     *
83     * @return True if the default error pages are correctly added
84     */
85    public static boolean addDefaultErrorPages(final HttpPageHandler pages,
86                                               final String title,
87                                               final Class<?> clasz) {
88      String pagename;
89      final String header;
90      final String footer;
91      final String beginform;
92      final String endform;
93      final String nextinform;
94      String uri;
95      final String errorpage;
96      final String classname;
97      final PageRole pageRole;
98      LinkedHashMap<String, AbstractHttpField> linkedHashMap;
99      final String fieldname;
100     final String fieldinfo;
101     String fieldvalue;
102     final FieldRole fieldRole;
103     final boolean fieldvisibility;
104     final boolean fieldmandatory;
105     final boolean fieldcookieset;
106     final boolean fieldtovalidate;
107     final int fieldrank;
108 
109     // Need as default error pages: 400, 401, 403, 404, 406, 500
110     try {
111       pageRole = PageRole.ERROR;
112       pagename = "400";
113       uri = "400";
114       header = "<HTML><HEAD><TITLE>" + title + "</TITLE></HEAD><BODY>";
115       footer = "</BODY></HTML>";
116       beginform = "<table border=\"0\"><tr><td><h1>" + title + "</h1>";
117       endform =
118           "</td></tr></table><br><CENTER><HR WIDTH=\"75%\" NOSHADE color=\"blue\"></CENTER>";
119       nextinform = "</td></tr><tr><td>";
120       classname = clasz.getName();
121       errorpage = null;
122       linkedHashMap = new LinkedHashMap<String, AbstractHttpField>();
123       fieldname = AbstractHttpField.ERRORINFO;
124       fieldinfo = "Error information";
125       fieldvalue = HttpResponseStatus.BAD_REQUEST.reasonPhrase();
126       fieldRole = FieldRole.BUSINESS_INPUT_TEXT;
127       fieldvisibility = true;
128       fieldmandatory = false;
129       fieldcookieset = false;
130       fieldtovalidate = false;
131       fieldrank = 1;
132       linkedHashMap.put(fieldname,
133                         new DefaultHttpField(fieldname, fieldRole, fieldinfo,
134                                              fieldvalue, fieldvisibility,
135                                              fieldmandatory, fieldcookieset,
136                                              fieldtovalidate,
137                                              FieldPosition.BODY, fieldrank));
138       pages.getHashmap().put(uri, new HttpPage(pagename, null, header, footer,
139                                                beginform, endform, nextinform,
140                                                uri, pageRole, errorpage,
141                                                classname, linkedHashMap));
142 
143       pagename = "401";
144       uri = "401";
145       linkedHashMap = new LinkedHashMap<String, AbstractHttpField>();
146       fieldvalue = HttpResponseStatus.UNAUTHORIZED.reasonPhrase();
147       linkedHashMap.put(fieldname,
148                         new DefaultHttpField(fieldname, fieldRole, fieldinfo,
149                                              fieldvalue, fieldvisibility,
150                                              fieldmandatory, fieldcookieset,
151                                              fieldtovalidate,
152                                              FieldPosition.BODY, fieldrank));
153       pages.getHashmap().put(uri, new HttpPage(pagename, null, header, footer,
154                                                beginform, endform, nextinform,
155                                                uri, pageRole, errorpage,
156                                                classname, linkedHashMap));
157 
158       pagename = "403";
159       uri = "403";
160       linkedHashMap = new LinkedHashMap<String, AbstractHttpField>();
161       fieldvalue = HttpResponseStatus.FORBIDDEN.reasonPhrase();
162       linkedHashMap.put(fieldname,
163                         new DefaultHttpField(fieldname, fieldRole, fieldinfo,
164                                              fieldvalue, fieldvisibility,
165                                              fieldmandatory, fieldcookieset,
166                                              fieldtovalidate,
167                                              FieldPosition.BODY, fieldrank));
168       pages.getHashmap().put(uri, new HttpPage(pagename, null, header, footer,
169                                                beginform, endform, nextinform,
170                                                uri, pageRole, errorpage,
171                                                classname, linkedHashMap));
172 
173       pagename = "404";
174       uri = "404";
175       linkedHashMap = new LinkedHashMap<String, AbstractHttpField>();
176       fieldvalue = HttpResponseStatus.NOT_FOUND.reasonPhrase();
177       linkedHashMap.put(fieldname,
178                         new DefaultHttpField(fieldname, fieldRole, fieldinfo,
179                                              fieldvalue, fieldvisibility,
180                                              fieldmandatory, fieldcookieset,
181                                              fieldtovalidate,
182                                              FieldPosition.BODY, fieldrank));
183       pages.getHashmap().put(uri, new HttpPage(pagename, null, header, footer,
184                                                beginform, endform, nextinform,
185                                                uri, pageRole, errorpage,
186                                                classname, linkedHashMap));
187 
188       pagename = "406";
189       uri = "406";
190       linkedHashMap = new LinkedHashMap<String, AbstractHttpField>();
191       fieldvalue = HttpResponseStatus.NOT_ACCEPTABLE.reasonPhrase();
192       linkedHashMap.put(fieldname,
193                         new DefaultHttpField(fieldname, fieldRole, fieldinfo,
194                                              fieldvalue, fieldvisibility,
195                                              fieldmandatory, fieldcookieset,
196                                              fieldtovalidate,
197                                              FieldPosition.BODY, fieldrank));
198       pages.getHashmap().put(uri, new HttpPage(pagename, null, header, footer,
199                                                beginform, endform, nextinform,
200                                                uri, pageRole, errorpage,
201                                                classname, linkedHashMap));
202 
203       pagename = "500";
204       uri = "500";
205       linkedHashMap = new LinkedHashMap<String, AbstractHttpField>();
206       fieldvalue = HttpResponseStatus.INTERNAL_SERVER_ERROR.reasonPhrase();
207       linkedHashMap.put(fieldname,
208                         new DefaultHttpField(fieldname, fieldRole, fieldinfo,
209                                              fieldvalue, fieldvisibility,
210                                              fieldmandatory, fieldcookieset,
211                                              fieldtovalidate,
212                                              FieldPosition.BODY, fieldrank));
213       pages.getHashmap().put(uri, new HttpPage(pagename, null, header, footer,
214                                                beginform, endform, nextinform,
215                                                uri, pageRole, errorpage,
216                                                classname, linkedHashMap));
217       return true;
218     } catch (final ClassNotFoundException ignored) {
219       // nothing
220     } catch (final InstantiationException ignored) {
221       // nothing
222     } catch (final IllegalAccessException ignored) {
223       // nothing
224     }
225     return false;
226   }
227 }