Mercurial > hg > orthanc
annotate OrthancServer/Plugins/Samples/ServeFolders/Plugin.cpp @ 5583:74cc31c8db2b find-refactoring
removed FindResponse::Item::responseContent_
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Sat, 27 Apr 2024 22:15:37 +0200 |
parents | f0dc99bc811c |
children | f7adfb22e20e |
rev | line source |
---|---|
1322
f497a72d9f71
fixes to the sample plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1 /** |
f497a72d9f71
fixes to the sample plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
2 * Orthanc - A Lightweight, RESTful DICOM Store |
1900 | 3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics |
1322
f497a72d9f71
fixes to the sample plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
4 * Department, University Hospital of Liege, Belgium |
5485
48b8dae6dc77
upgrade to year 2024
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5185
diff
changeset
|
5 * Copyright (C) 2017-2024 Osimis S.A., Belgium |
48b8dae6dc77
upgrade to year 2024
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5185
diff
changeset
|
6 * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium |
1322
f497a72d9f71
fixes to the sample plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
7 * |
1375
3d76e26b3865
fix licensing terms of samples
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1323
diff
changeset
|
8 * This program is free software: you can redistribute it and/or |
3d76e26b3865
fix licensing terms of samples
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1323
diff
changeset
|
9 * modify it under the terms of the GNU General Public License as |
3d76e26b3865
fix licensing terms of samples
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1323
diff
changeset
|
10 * published by the Free Software Foundation, either version 3 of the |
3d76e26b3865
fix licensing terms of samples
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1323
diff
changeset
|
11 * License, or (at your option) any later version. |
3d76e26b3865
fix licensing terms of samples
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1323
diff
changeset
|
12 * |
3d76e26b3865
fix licensing terms of samples
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1323
diff
changeset
|
13 * This program is distributed in the hope that it will be useful, but |
3d76e26b3865
fix licensing terms of samples
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1323
diff
changeset
|
14 * WITHOUT ANY WARRANTY; without even the implied warranty of |
3d76e26b3865
fix licensing terms of samples
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1323
diff
changeset
|
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
3d76e26b3865
fix licensing terms of samples
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1323
diff
changeset
|
16 * General Public License for more details. |
1322
f497a72d9f71
fixes to the sample plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
17 * |
1375
3d76e26b3865
fix licensing terms of samples
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1323
diff
changeset
|
18 * You should have received a copy of the GNU General Public License |
3d76e26b3865
fix licensing terms of samples
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1323
diff
changeset
|
19 * along with this program. If not, see <http://www.gnu.org/licenses/>. |
1322
f497a72d9f71
fixes to the sample plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
20 **/ |
f497a72d9f71
fixes to the sample plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
21 |
f497a72d9f71
fixes to the sample plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
22 |
5538
6ce05f8b5b13
deprecating OrthancPluginSetDescription2(), OrthancPluginExtendOrthancExplorer2() and OrthancPluginSetRootUri2()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5485
diff
changeset
|
23 #define SERVE_FOLDERS_NAME "serve-folders" |
6ce05f8b5b13
deprecating OrthancPluginSetDescription2(), OrthancPluginExtendOrthancExplorer2() and OrthancPluginSetRootUri2()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5485
diff
changeset
|
24 |
2062
40ffd0e8676a
generation of etag in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2061
diff
changeset
|
25 #include "../Common/OrthancPluginCppWrapper.h" |
1322
f497a72d9f71
fixes to the sample plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
26 |
1323
5a92665dee23
Sample plugin: Serve folders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1322
diff
changeset
|
27 #include <json/value.h> |
1589
334d3a92ed83
improvements to the ServeFolders plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1588
diff
changeset
|
28 #include <boost/filesystem.hpp> |
2062
40ffd0e8676a
generation of etag in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2061
diff
changeset
|
29 #include <boost/date_time/posix_time/posix_time.hpp> |
1589
334d3a92ed83
improvements to the ServeFolders plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1588
diff
changeset
|
30 |
1322
f497a72d9f71
fixes to the sample plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
31 |
2176
fead5549aaa7
introduction of HAS_ORTHANC_EXCEPTION to avoid PluginException if not necessary
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
32 #if HAS_ORTHANC_EXCEPTION == 1 |
fead5549aaa7
introduction of HAS_ORTHANC_EXCEPTION to avoid PluginException if not necessary
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
33 # error The macro HAS_ORTHANC_EXCEPTION must be set to 0 to compile this plugin |
fead5549aaa7
introduction of HAS_ORTHANC_EXCEPTION to avoid PluginException if not necessary
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
34 #endif |
fead5549aaa7
introduction of HAS_ORTHANC_EXCEPTION to avoid PluginException if not necessary
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
35 |
fead5549aaa7
introduction of HAS_ORTHANC_EXCEPTION to avoid PluginException if not necessary
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
36 |
fead5549aaa7
introduction of HAS_ORTHANC_EXCEPTION to avoid PluginException if not necessary
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
37 |
2166
700dbb3baac9
refactoring in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2062
diff
changeset
|
38 static std::map<std::string, std::string> extensions_; |
1323
5a92665dee23
Sample plugin: Serve folders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1322
diff
changeset
|
39 static std::map<std::string, std::string> folders_; |
5a92665dee23
Sample plugin: Serve folders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1322
diff
changeset
|
40 static const char* INDEX_URI = "/app/plugin-serve-folders.html"; |
2168
84033563f7f0
ServeFolders: Better protection against exceptions in the callbacks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2167
diff
changeset
|
41 static bool allowCache_ = false; |
84033563f7f0
ServeFolders: Better protection against exceptions in the callbacks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2167
diff
changeset
|
42 static bool generateETag_ = true; |
2061
8856f15b3e02
disabling cache in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1911
diff
changeset
|
43 |
8856f15b3e02
disabling cache in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1911
diff
changeset
|
44 |
8856f15b3e02
disabling cache in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1911
diff
changeset
|
45 static void SetHttpHeaders(OrthancPluginRestOutput* output) |
8856f15b3e02
disabling cache in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1911
diff
changeset
|
46 { |
8856f15b3e02
disabling cache in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1911
diff
changeset
|
47 if (!allowCache_) |
8856f15b3e02
disabling cache in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1911
diff
changeset
|
48 { |
8856f15b3e02
disabling cache in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1911
diff
changeset
|
49 // http://stackoverflow.com/a/2068407/881731 |
2958
bb7a66efbeb1
OrthancPlugins::SetGlobalContext() in OrthancPluginCppWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2447
diff
changeset
|
50 OrthancPluginContext* context = OrthancPlugins::GetGlobalContext(); |
bb7a66efbeb1
OrthancPlugins::SetGlobalContext() in OrthancPluginCppWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2447
diff
changeset
|
51 OrthancPluginSetHttpHeader(context, output, "Cache-Control", "no-cache, no-store, must-revalidate"); |
bb7a66efbeb1
OrthancPlugins::SetGlobalContext() in OrthancPluginCppWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2447
diff
changeset
|
52 OrthancPluginSetHttpHeader(context, output, "Pragma", "no-cache"); |
bb7a66efbeb1
OrthancPlugins::SetGlobalContext() in OrthancPluginCppWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2447
diff
changeset
|
53 OrthancPluginSetHttpHeader(context, output, "Expires", "0"); |
2061
8856f15b3e02
disabling cache in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1911
diff
changeset
|
54 } |
8856f15b3e02
disabling cache in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1911
diff
changeset
|
55 } |
1323
5a92665dee23
Sample plugin: Serve folders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1322
diff
changeset
|
56 |
5a92665dee23
Sample plugin: Serve folders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1322
diff
changeset
|
57 |
2166
700dbb3baac9
refactoring in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2062
diff
changeset
|
58 static void RegisterDefaultExtensions() |
700dbb3baac9
refactoring in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2062
diff
changeset
|
59 { |
700dbb3baac9
refactoring in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2062
diff
changeset
|
60 extensions_["css"] = "text/css"; |
700dbb3baac9
refactoring in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2062
diff
changeset
|
61 extensions_["gif"] = "image/gif"; |
700dbb3baac9
refactoring in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2062
diff
changeset
|
62 extensions_["html"] = "text/html"; |
700dbb3baac9
refactoring in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2062
diff
changeset
|
63 extensions_["jpeg"] = "image/jpeg"; |
700dbb3baac9
refactoring in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2062
diff
changeset
|
64 extensions_["jpg"] = "image/jpeg"; |
700dbb3baac9
refactoring in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2062
diff
changeset
|
65 extensions_["js"] = "application/javascript"; |
700dbb3baac9
refactoring in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2062
diff
changeset
|
66 extensions_["json"] = "application/json"; |
4262
9a01e0f89b6d
ServeFolders plugin: mime type for ".map" file extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4146
diff
changeset
|
67 extensions_["map"] = "application/octet-stream"; // https://stackoverflow.com/a/19912684/881731 |
2166
700dbb3baac9
refactoring in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2062
diff
changeset
|
68 extensions_["nexe"] = "application/x-nacl"; |
700dbb3baac9
refactoring in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2062
diff
changeset
|
69 extensions_["nmf"] = "application/json"; |
4262
9a01e0f89b6d
ServeFolders plugin: mime type for ".map" file extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4146
diff
changeset
|
70 extensions_["pdf"] = "application/pdf"; |
2166
700dbb3baac9
refactoring in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2062
diff
changeset
|
71 extensions_["pexe"] = "application/x-pnacl"; |
700dbb3baac9
refactoring in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2062
diff
changeset
|
72 extensions_["png"] = "image/png"; |
700dbb3baac9
refactoring in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2062
diff
changeset
|
73 extensions_["svg"] = "image/svg+xml"; |
2433
b382879072a5
added application/wasm MIME type for WebAssembly
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2268
diff
changeset
|
74 extensions_["wasm"] = "application/wasm"; |
2166
700dbb3baac9
refactoring in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2062
diff
changeset
|
75 extensions_["woff"] = "application/x-font-woff"; |
4262
9a01e0f89b6d
ServeFolders plugin: mime type for ".map" file extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4146
diff
changeset
|
76 extensions_["woff2"] = "font/woff2"; |
2166
700dbb3baac9
refactoring in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2062
diff
changeset
|
77 extensions_["xml"] = "application/xml"; |
700dbb3baac9
refactoring in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2062
diff
changeset
|
78 } |
700dbb3baac9
refactoring in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2062
diff
changeset
|
79 |
700dbb3baac9
refactoring in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2062
diff
changeset
|
80 |
700dbb3baac9
refactoring in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2062
diff
changeset
|
81 static std::string GetMimeType(const std::string& path) |
1323
5a92665dee23
Sample plugin: Serve folders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1322
diff
changeset
|
82 { |
5a92665dee23
Sample plugin: Serve folders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1322
diff
changeset
|
83 size_t dot = path.find_last_of('.'); |
5a92665dee23
Sample plugin: Serve folders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1322
diff
changeset
|
84 |
2166
700dbb3baac9
refactoring in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2062
diff
changeset
|
85 std::string extension = (dot == std::string::npos) ? "" : path.substr(dot + 1); |
1323
5a92665dee23
Sample plugin: Serve folders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1322
diff
changeset
|
86 std::transform(extension.begin(), extension.end(), extension.begin(), tolower); |
5a92665dee23
Sample plugin: Serve folders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1322
diff
changeset
|
87 |
2166
700dbb3baac9
refactoring in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2062
diff
changeset
|
88 std::map<std::string, std::string>::const_iterator found = extensions_.find(extension); |
700dbb3baac9
refactoring in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2062
diff
changeset
|
89 |
700dbb3baac9
refactoring in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2062
diff
changeset
|
90 if (found != extensions_.end() && |
700dbb3baac9
refactoring in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2062
diff
changeset
|
91 !found->second.empty()) |
1323
5a92665dee23
Sample plugin: Serve folders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1322
diff
changeset
|
92 { |
2166
700dbb3baac9
refactoring in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2062
diff
changeset
|
93 return found->second; |
2061
8856f15b3e02
disabling cache in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1911
diff
changeset
|
94 } |
1323
5a92665dee23
Sample plugin: Serve folders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1322
diff
changeset
|
95 else |
5a92665dee23
Sample plugin: Serve folders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1322
diff
changeset
|
96 { |
5572
f0dc99bc811c
removed circular dependency of OrthancPluginsCppWrapper with Orthanc::Logging
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5563
diff
changeset
|
97 ORTHANC_PLUGINS_LOG_WARNING("ServeFolders: Unknown MIME type for extension \"" + extension + "\""); |
1323
5a92665dee23
Sample plugin: Serve folders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1322
diff
changeset
|
98 return "application/octet-stream"; |
5a92665dee23
Sample plugin: Serve folders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1322
diff
changeset
|
99 } |
5a92665dee23
Sample plugin: Serve folders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1322
diff
changeset
|
100 } |
5a92665dee23
Sample plugin: Serve folders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1322
diff
changeset
|
101 |
1322
f497a72d9f71
fixes to the sample plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
102 |
1589
334d3a92ed83
improvements to the ServeFolders plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1588
diff
changeset
|
103 static bool LookupFolder(std::string& folder, |
334d3a92ed83
improvements to the ServeFolders plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1588
diff
changeset
|
104 OrthancPluginRestOutput* output, |
334d3a92ed83
improvements to the ServeFolders plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1588
diff
changeset
|
105 const OrthancPluginHttpRequest* request) |
334d3a92ed83
improvements to the ServeFolders plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1588
diff
changeset
|
106 { |
334d3a92ed83
improvements to the ServeFolders plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1588
diff
changeset
|
107 const std::string uri = request->groups[0]; |
334d3a92ed83
improvements to the ServeFolders plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1588
diff
changeset
|
108 |
334d3a92ed83
improvements to the ServeFolders plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1588
diff
changeset
|
109 std::map<std::string, std::string>::const_iterator found = folders_.find(uri); |
334d3a92ed83
improvements to the ServeFolders plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1588
diff
changeset
|
110 if (found == folders_.end()) |
334d3a92ed83
improvements to the ServeFolders plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1588
diff
changeset
|
111 { |
5572
f0dc99bc811c
removed circular dependency of OrthancPluginsCppWrapper with Orthanc::Logging
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5563
diff
changeset
|
112 ORTHANC_PLUGINS_LOG_ERROR("Unknown URI in plugin server-folders: " + uri); |
2958
bb7a66efbeb1
OrthancPlugins::SetGlobalContext() in OrthancPluginCppWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2447
diff
changeset
|
113 OrthancPluginSendHttpStatusCode(OrthancPlugins::GetGlobalContext(), output, 404); |
1589
334d3a92ed83
improvements to the ServeFolders plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1588
diff
changeset
|
114 return false; |
334d3a92ed83
improvements to the ServeFolders plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1588
diff
changeset
|
115 } |
334d3a92ed83
improvements to the ServeFolders plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1588
diff
changeset
|
116 else |
334d3a92ed83
improvements to the ServeFolders plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1588
diff
changeset
|
117 { |
334d3a92ed83
improvements to the ServeFolders plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1588
diff
changeset
|
118 folder = found->second; |
334d3a92ed83
improvements to the ServeFolders plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1588
diff
changeset
|
119 return true; |
334d3a92ed83
improvements to the ServeFolders plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1588
diff
changeset
|
120 } |
334d3a92ed83
improvements to the ServeFolders plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1588
diff
changeset
|
121 } |
334d3a92ed83
improvements to the ServeFolders plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1588
diff
changeset
|
122 |
334d3a92ed83
improvements to the ServeFolders plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1588
diff
changeset
|
123 |
2169
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
124 static void Answer(OrthancPluginRestOutput* output, |
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
125 const char* content, |
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
126 size_t size, |
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
127 const std::string& mime) |
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
128 { |
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
129 if (generateETag_) |
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
130 { |
2958
bb7a66efbeb1
OrthancPlugins::SetGlobalContext() in OrthancPluginCppWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2447
diff
changeset
|
131 OrthancPlugins::OrthancString md5; |
bb7a66efbeb1
OrthancPlugins::SetGlobalContext() in OrthancPluginCppWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2447
diff
changeset
|
132 md5.Assign(OrthancPluginComputeMd5(OrthancPlugins::GetGlobalContext(), content, size)); |
2205
395522e46b2b
refactoring of the worklist sample using OrthancPluginCppWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2177
diff
changeset
|
133 |
2169
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
134 std::string etag = "\"" + std::string(md5.GetContent()) + "\""; |
2958
bb7a66efbeb1
OrthancPlugins::SetGlobalContext() in OrthancPluginCppWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2447
diff
changeset
|
135 OrthancPluginSetHttpHeader(OrthancPlugins::GetGlobalContext(), output, "ETag", etag.c_str()); |
2169
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
136 } |
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
137 |
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
138 SetHttpHeaders(output); |
2958
bb7a66efbeb1
OrthancPlugins::SetGlobalContext() in OrthancPluginCppWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2447
diff
changeset
|
139 OrthancPluginAnswerBuffer(OrthancPlugins::GetGlobalContext(), output, content, size, mime.c_str()); |
2169
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
140 } |
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
141 |
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
142 |
2168
84033563f7f0
ServeFolders: Better protection against exceptions in the callbacks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2167
diff
changeset
|
143 void ServeFolder(OrthancPluginRestOutput* output, |
84033563f7f0
ServeFolders: Better protection against exceptions in the callbacks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2167
diff
changeset
|
144 const char* url, |
84033563f7f0
ServeFolders: Better protection against exceptions in the callbacks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2167
diff
changeset
|
145 const OrthancPluginHttpRequest* request) |
1323
5a92665dee23
Sample plugin: Serve folders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1322
diff
changeset
|
146 { |
1597
415dfd1d1c61
Improvements to the sample "ServeFolders" plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1589
diff
changeset
|
147 namespace fs = boost::filesystem; |
415dfd1d1c61
Improvements to the sample "ServeFolders" plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1589
diff
changeset
|
148 |
1323
5a92665dee23
Sample plugin: Serve folders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1322
diff
changeset
|
149 if (request->method != OrthancPluginHttpMethod_Get) |
5a92665dee23
Sample plugin: Serve folders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1322
diff
changeset
|
150 { |
2958
bb7a66efbeb1
OrthancPlugins::SetGlobalContext() in OrthancPluginCppWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2447
diff
changeset
|
151 OrthancPluginSendMethodNotAllowed(OrthancPlugins::GetGlobalContext(), output, "GET"); |
2168
84033563f7f0
ServeFolders: Better protection against exceptions in the callbacks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2167
diff
changeset
|
152 return; |
1323
5a92665dee23
Sample plugin: Serve folders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1322
diff
changeset
|
153 } |
5a92665dee23
Sample plugin: Serve folders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1322
diff
changeset
|
154 |
1589
334d3a92ed83
improvements to the ServeFolders plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1588
diff
changeset
|
155 std::string folder; |
1323
5a92665dee23
Sample plugin: Serve folders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1322
diff
changeset
|
156 |
1589
334d3a92ed83
improvements to the ServeFolders plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1588
diff
changeset
|
157 if (LookupFolder(folder, output, request)) |
1323
5a92665dee23
Sample plugin: Serve folders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1322
diff
changeset
|
158 { |
1597
415dfd1d1c61
Improvements to the sample "ServeFolders" plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1589
diff
changeset
|
159 const fs::path item(request->groups[1]); |
415dfd1d1c61
Improvements to the sample "ServeFolders" plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1589
diff
changeset
|
160 const fs::path parent((fs::path(folder) / item).parent_path()); |
1589
334d3a92ed83
improvements to the ServeFolders plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1588
diff
changeset
|
161 |
1597
415dfd1d1c61
Improvements to the sample "ServeFolders" plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1589
diff
changeset
|
162 if (item.filename().string() == "index.html" && |
415dfd1d1c61
Improvements to the sample "ServeFolders" plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1589
diff
changeset
|
163 fs::is_directory(parent) && |
415dfd1d1c61
Improvements to the sample "ServeFolders" plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1589
diff
changeset
|
164 !fs::is_regular_file(fs::path(folder) / item)) |
415dfd1d1c61
Improvements to the sample "ServeFolders" plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1589
diff
changeset
|
165 { |
415dfd1d1c61
Improvements to the sample "ServeFolders" plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1589
diff
changeset
|
166 // On-the-fly generation of an "index.html" |
415dfd1d1c61
Improvements to the sample "ServeFolders" plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1589
diff
changeset
|
167 std::string s; |
415dfd1d1c61
Improvements to the sample "ServeFolders" plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1589
diff
changeset
|
168 s += "<html>\n"; |
415dfd1d1c61
Improvements to the sample "ServeFolders" plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1589
diff
changeset
|
169 s += " <body>\n"; |
415dfd1d1c61
Improvements to the sample "ServeFolders" plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1589
diff
changeset
|
170 s += " <ul>\n"; |
415dfd1d1c61
Improvements to the sample "ServeFolders" plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1589
diff
changeset
|
171 |
415dfd1d1c61
Improvements to the sample "ServeFolders" plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1589
diff
changeset
|
172 fs::directory_iterator end; |
1323
5a92665dee23
Sample plugin: Serve folders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1322
diff
changeset
|
173 |
1597
415dfd1d1c61
Improvements to the sample "ServeFolders" plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1589
diff
changeset
|
174 for (fs::directory_iterator it(parent) ; it != end; ++it) |
415dfd1d1c61
Improvements to the sample "ServeFolders" plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1589
diff
changeset
|
175 { |
415dfd1d1c61
Improvements to the sample "ServeFolders" plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1589
diff
changeset
|
176 if (fs::is_directory(it->status())) |
415dfd1d1c61
Improvements to the sample "ServeFolders" plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1589
diff
changeset
|
177 { |
415dfd1d1c61
Improvements to the sample "ServeFolders" plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1589
diff
changeset
|
178 std::string f = it->path().filename().string(); |
415dfd1d1c61
Improvements to the sample "ServeFolders" plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1589
diff
changeset
|
179 s += " <li><a href=\"" + f + "/index.html\">" + f + "/</a></li>\n"; |
415dfd1d1c61
Improvements to the sample "ServeFolders" plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1589
diff
changeset
|
180 } |
415dfd1d1c61
Improvements to the sample "ServeFolders" plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1589
diff
changeset
|
181 } |
415dfd1d1c61
Improvements to the sample "ServeFolders" plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1589
diff
changeset
|
182 |
415dfd1d1c61
Improvements to the sample "ServeFolders" plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1589
diff
changeset
|
183 for (fs::directory_iterator it(parent) ; it != end; ++it) |
415dfd1d1c61
Improvements to the sample "ServeFolders" plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1589
diff
changeset
|
184 { |
1911 | 185 fs::file_type type = it->status().type(); |
186 | |
187 if (type == fs::regular_file || | |
188 type == fs::reparse_file) // cf. BitBucket issue #11 | |
1597
415dfd1d1c61
Improvements to the sample "ServeFolders" plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1589
diff
changeset
|
189 { |
415dfd1d1c61
Improvements to the sample "ServeFolders" plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1589
diff
changeset
|
190 std::string f = it->path().filename().string(); |
415dfd1d1c61
Improvements to the sample "ServeFolders" plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1589
diff
changeset
|
191 s += " <li><a href=\"" + f + "\">" + f + "</a></li>\n"; |
415dfd1d1c61
Improvements to the sample "ServeFolders" plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1589
diff
changeset
|
192 } |
415dfd1d1c61
Improvements to the sample "ServeFolders" plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1589
diff
changeset
|
193 } |
415dfd1d1c61
Improvements to the sample "ServeFolders" plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1589
diff
changeset
|
194 |
415dfd1d1c61
Improvements to the sample "ServeFolders" plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1589
diff
changeset
|
195 s += " </ul>\n"; |
415dfd1d1c61
Improvements to the sample "ServeFolders" plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1589
diff
changeset
|
196 s += " </body>\n"; |
415dfd1d1c61
Improvements to the sample "ServeFolders" plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1589
diff
changeset
|
197 s += "</html>\n"; |
415dfd1d1c61
Improvements to the sample "ServeFolders" plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1589
diff
changeset
|
198 |
2169
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
199 Answer(output, s.c_str(), s.size(), "text/html"); |
1589
334d3a92ed83
improvements to the ServeFolders plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1588
diff
changeset
|
200 } |
334d3a92ed83
improvements to the ServeFolders plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1588
diff
changeset
|
201 else |
334d3a92ed83
improvements to the ServeFolders plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1588
diff
changeset
|
202 { |
1597
415dfd1d1c61
Improvements to the sample "ServeFolders" plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1589
diff
changeset
|
203 std::string path = folder + "/" + item.string(); |
2166
700dbb3baac9
refactoring in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2062
diff
changeset
|
204 std::string mime = GetMimeType(path); |
1597
415dfd1d1c61
Improvements to the sample "ServeFolders" plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1589
diff
changeset
|
205 |
2958
bb7a66efbeb1
OrthancPlugins::SetGlobalContext() in OrthancPluginCppWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2447
diff
changeset
|
206 OrthancPlugins::MemoryBuffer content; |
2062
40ffd0e8676a
generation of etag in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2061
diff
changeset
|
207 |
2168
84033563f7f0
ServeFolders: Better protection against exceptions in the callbacks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2167
diff
changeset
|
208 try |
84033563f7f0
ServeFolders: Better protection against exceptions in the callbacks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2167
diff
changeset
|
209 { |
84033563f7f0
ServeFolders: Better protection against exceptions in the callbacks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2167
diff
changeset
|
210 content.ReadFile(path); |
84033563f7f0
ServeFolders: Better protection against exceptions in the callbacks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2167
diff
changeset
|
211 } |
2176
fead5549aaa7
introduction of HAS_ORTHANC_EXCEPTION to avoid PluginException if not necessary
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
212 catch (...) |
2168
84033563f7f0
ServeFolders: Better protection against exceptions in the callbacks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2167
diff
changeset
|
213 { |
2234
a78d15509a1c
cleaner separation of PluginException
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2205
diff
changeset
|
214 ORTHANC_PLUGINS_THROW_EXCEPTION(InexistentFile); |
2168
84033563f7f0
ServeFolders: Better protection against exceptions in the callbacks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2167
diff
changeset
|
215 } |
2062
40ffd0e8676a
generation of etag in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2061
diff
changeset
|
216 |
2958
bb7a66efbeb1
OrthancPlugins::SetGlobalContext() in OrthancPluginCppWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2447
diff
changeset
|
217 boost::posix_time::ptime lastModification = |
bb7a66efbeb1
OrthancPlugins::SetGlobalContext() in OrthancPluginCppWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2447
diff
changeset
|
218 boost::posix_time::from_time_t(fs::last_write_time(path)); |
2168
84033563f7f0
ServeFolders: Better protection against exceptions in the callbacks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2167
diff
changeset
|
219 std::string t = boost::posix_time::to_iso_string(lastModification); |
2958
bb7a66efbeb1
OrthancPlugins::SetGlobalContext() in OrthancPluginCppWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2447
diff
changeset
|
220 OrthancPluginSetHttpHeader(OrthancPlugins::GetGlobalContext(), |
bb7a66efbeb1
OrthancPlugins::SetGlobalContext() in OrthancPluginCppWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2447
diff
changeset
|
221 output, "Last-Modified", t.c_str()); |
2168
84033563f7f0
ServeFolders: Better protection against exceptions in the callbacks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2167
diff
changeset
|
222 |
2169
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
223 Answer(output, content.GetData(), content.GetSize(), mime); |
1589
334d3a92ed83
improvements to the ServeFolders plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1588
diff
changeset
|
224 } |
1323
5a92665dee23
Sample plugin: Serve folders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1322
diff
changeset
|
225 } |
5a92665dee23
Sample plugin: Serve folders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1322
diff
changeset
|
226 } |
5a92665dee23
Sample plugin: Serve folders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1322
diff
changeset
|
227 |
5a92665dee23
Sample plugin: Serve folders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1322
diff
changeset
|
228 |
2168
84033563f7f0
ServeFolders: Better protection against exceptions in the callbacks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2167
diff
changeset
|
229 void ListServedFolders(OrthancPluginRestOutput* output, |
84033563f7f0
ServeFolders: Better protection against exceptions in the callbacks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2167
diff
changeset
|
230 const char* url, |
84033563f7f0
ServeFolders: Better protection against exceptions in the callbacks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2167
diff
changeset
|
231 const OrthancPluginHttpRequest* request) |
1323
5a92665dee23
Sample plugin: Serve folders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1322
diff
changeset
|
232 { |
5a92665dee23
Sample plugin: Serve folders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1322
diff
changeset
|
233 if (request->method != OrthancPluginHttpMethod_Get) |
5a92665dee23
Sample plugin: Serve folders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1322
diff
changeset
|
234 { |
2958
bb7a66efbeb1
OrthancPlugins::SetGlobalContext() in OrthancPluginCppWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2447
diff
changeset
|
235 OrthancPluginSendMethodNotAllowed(OrthancPlugins::GetGlobalContext(), output, "GET"); |
2168
84033563f7f0
ServeFolders: Better protection against exceptions in the callbacks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2167
diff
changeset
|
236 return; |
1323
5a92665dee23
Sample plugin: Serve folders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1322
diff
changeset
|
237 } |
5a92665dee23
Sample plugin: Serve folders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1322
diff
changeset
|
238 |
1434
f9cd40166269
refactoring of OrthancPlugins, improvement in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1425
diff
changeset
|
239 std::string s = "<html><body><h1>Additional folders served by Orthanc</h1>\n"; |
1323
5a92665dee23
Sample plugin: Serve folders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1322
diff
changeset
|
240 |
1434
f9cd40166269
refactoring of OrthancPlugins, improvement in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1425
diff
changeset
|
241 if (folders_.empty()) |
f9cd40166269
refactoring of OrthancPlugins, improvement in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1425
diff
changeset
|
242 { |
f9cd40166269
refactoring of OrthancPlugins, improvement in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1425
diff
changeset
|
243 s += "<p>Empty section <tt>ServeFolders</tt> in your configuration file: No additional folder is served.</p>\n"; |
f9cd40166269
refactoring of OrthancPlugins, improvement in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1425
diff
changeset
|
244 } |
f9cd40166269
refactoring of OrthancPlugins, improvement in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1425
diff
changeset
|
245 else |
1323
5a92665dee23
Sample plugin: Serve folders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1322
diff
changeset
|
246 { |
1434
f9cd40166269
refactoring of OrthancPlugins, improvement in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1425
diff
changeset
|
247 s += "<ul>\n"; |
f9cd40166269
refactoring of OrthancPlugins, improvement in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1425
diff
changeset
|
248 for (std::map<std::string, std::string>::const_iterator |
f9cd40166269
refactoring of OrthancPlugins, improvement in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1425
diff
changeset
|
249 it = folders_.begin(); it != folders_.end(); ++it) |
f9cd40166269
refactoring of OrthancPlugins, improvement in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1425
diff
changeset
|
250 { |
1597
415dfd1d1c61
Improvements to the sample "ServeFolders" plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1589
diff
changeset
|
251 // The URI is relative to INDEX_URI ("/app/plugin-serve-folders.html") |
415dfd1d1c61
Improvements to the sample "ServeFolders" plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1589
diff
changeset
|
252 s += "<li><a href=\"../" + it->first + "/index.html\">" + it->first + "</li>\n"; |
1434
f9cd40166269
refactoring of OrthancPlugins, improvement in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1425
diff
changeset
|
253 } |
f9cd40166269
refactoring of OrthancPlugins, improvement in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1425
diff
changeset
|
254 |
f9cd40166269
refactoring of OrthancPlugins, improvement in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1425
diff
changeset
|
255 s += "</ul>\n"; |
1323
5a92665dee23
Sample plugin: Serve folders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1322
diff
changeset
|
256 } |
5a92665dee23
Sample plugin: Serve folders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1322
diff
changeset
|
257 |
1434
f9cd40166269
refactoring of OrthancPlugins, improvement in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1425
diff
changeset
|
258 s += "</body></html>\n"; |
1323
5a92665dee23
Sample plugin: Serve folders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1322
diff
changeset
|
259 |
2169
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
260 Answer(output, s.c_str(), s.size(), "text/html"); |
1322
f497a72d9f71
fixes to the sample plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
261 } |
f497a72d9f71
fixes to the sample plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
262 |
f497a72d9f71
fixes to the sample plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
263 |
2167
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
264 static void ConfigureFolders(const Json::Value& folders) |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
265 { |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
266 if (folders.type() != Json::objectValue) |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
267 { |
5572
f0dc99bc811c
removed circular dependency of OrthancPluginsCppWrapper with Orthanc::Logging
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5563
diff
changeset
|
268 ORTHANC_PLUGINS_LOG_ERROR("The list of folders to be served is badly formatted (must be a JSON object)"); |
2234
a78d15509a1c
cleaner separation of PluginException
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2205
diff
changeset
|
269 ORTHANC_PLUGINS_THROW_EXCEPTION(BadFileFormat); |
2167
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
270 } |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
271 |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
272 Json::Value::Members members = folders.getMemberNames(); |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
273 |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
274 // Register the callback for each base URI |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
275 for (Json::Value::Members::const_iterator |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
276 it = members.begin(); it != members.end(); ++it) |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
277 { |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
278 if (folders[*it].type() != Json::stringValue) |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
279 { |
5572
f0dc99bc811c
removed circular dependency of OrthancPluginsCppWrapper with Orthanc::Logging
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5563
diff
changeset
|
280 ORTHANC_PLUGINS_LOG_ERROR("The folder to be served \"" + *it + |
f0dc99bc811c
removed circular dependency of OrthancPluginsCppWrapper with Orthanc::Logging
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5563
diff
changeset
|
281 "\" must be associated with a string value (its mapped URI)"); |
2234
a78d15509a1c
cleaner separation of PluginException
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2205
diff
changeset
|
282 ORTHANC_PLUGINS_THROW_EXCEPTION(BadFileFormat); |
2167
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
283 } |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
284 |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
285 std::string baseUri = *it; |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
286 |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
287 // Remove the heading and trailing slashes in the root URI, if any |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
288 while (!baseUri.empty() && |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
289 *baseUri.begin() == '/') |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
290 { |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
291 baseUri = baseUri.substr(1); |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
292 } |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
293 |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
294 while (!baseUri.empty() && |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
295 *baseUri.rbegin() == '/') |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
296 { |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
297 baseUri.resize(baseUri.size() - 1); |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
298 } |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
299 |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
300 if (baseUri.empty()) |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
301 { |
5572
f0dc99bc811c
removed circular dependency of OrthancPluginsCppWrapper with Orthanc::Logging
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5563
diff
changeset
|
302 ORTHANC_PLUGINS_LOG_ERROR("The URI of a folder to be served cannot be empty"); |
2234
a78d15509a1c
cleaner separation of PluginException
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2205
diff
changeset
|
303 ORTHANC_PLUGINS_THROW_EXCEPTION(BadFileFormat); |
2167
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
304 } |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
305 |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
306 // Check whether the source folder exists and is indeed a directory |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
307 const std::string folder = folders[*it].asString(); |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
308 if (!boost::filesystem::is_directory(folder)) |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
309 { |
5572
f0dc99bc811c
removed circular dependency of OrthancPluginsCppWrapper with Orthanc::Logging
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5563
diff
changeset
|
310 ORTHANC_PLUGINS_LOG_ERROR("Trying to serve an inexistent folder: " + folder); |
2234
a78d15509a1c
cleaner separation of PluginException
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2205
diff
changeset
|
311 ORTHANC_PLUGINS_THROW_EXCEPTION(InexistentFile); |
2167
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
312 } |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
313 |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
314 folders_[baseUri] = folder; |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
315 |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
316 // Register the callback to serve the folder |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
317 { |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
318 const std::string regex = "/(" + baseUri + ")/(.*)"; |
2958
bb7a66efbeb1
OrthancPlugins::SetGlobalContext() in OrthancPluginCppWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2447
diff
changeset
|
319 OrthancPlugins::RegisterRestCallback<ServeFolder>(regex.c_str(), true); |
2167
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
320 } |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
321 } |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
322 } |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
323 |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
324 |
2169
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
325 static void ConfigureExtensions(const Json::Value& extensions) |
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
326 { |
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
327 if (extensions.type() != Json::objectValue) |
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
328 { |
5572
f0dc99bc811c
removed circular dependency of OrthancPluginsCppWrapper with Orthanc::Logging
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5563
diff
changeset
|
329 ORTHANC_PLUGINS_LOG_ERROR("The list of extensions is badly formatted (must be a JSON object)"); |
2234
a78d15509a1c
cleaner separation of PluginException
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2205
diff
changeset
|
330 ORTHANC_PLUGINS_THROW_EXCEPTION(BadFileFormat); |
2169
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
331 } |
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
332 |
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
333 Json::Value::Members members = extensions.getMemberNames(); |
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
334 |
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
335 for (Json::Value::Members::const_iterator |
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
336 it = members.begin(); it != members.end(); ++it) |
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
337 { |
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
338 if (extensions[*it].type() != Json::stringValue) |
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
339 { |
5572
f0dc99bc811c
removed circular dependency of OrthancPluginsCppWrapper with Orthanc::Logging
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5563
diff
changeset
|
340 ORTHANC_PLUGINS_LOG_ERROR("The file extension \"" + *it + |
f0dc99bc811c
removed circular dependency of OrthancPluginsCppWrapper with Orthanc::Logging
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5563
diff
changeset
|
341 "\" must be associated with a string value (its MIME type)"); |
2234
a78d15509a1c
cleaner separation of PluginException
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2205
diff
changeset
|
342 ORTHANC_PLUGINS_THROW_EXCEPTION(BadFileFormat); |
2169
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
343 } |
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
344 |
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
345 const std::string& mime = extensions[*it].asString(); |
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
346 |
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
347 std::string name = *it; |
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
348 |
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
349 if (!name.empty() && |
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
350 name[0] == '.') |
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
351 { |
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
352 name = name.substr(1); // Remove the leading dot "." |
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
353 } |
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
354 |
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
355 extensions_[name] = mime; |
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
356 |
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
357 if (mime.empty()) |
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
358 { |
5572
f0dc99bc811c
removed circular dependency of OrthancPluginsCppWrapper with Orthanc::Logging
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5563
diff
changeset
|
359 ORTHANC_PLUGINS_LOG_WARNING("ServeFolders: Removing MIME type for file extension \"." + |
f0dc99bc811c
removed circular dependency of OrthancPluginsCppWrapper with Orthanc::Logging
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5563
diff
changeset
|
360 name + "\""); |
2169
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
361 } |
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
362 else |
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
363 { |
5572
f0dc99bc811c
removed circular dependency of OrthancPluginsCppWrapper with Orthanc::Logging
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5563
diff
changeset
|
364 ORTHANC_PLUGINS_LOG_WARNING("ServeFolders: Associating file extension \"." + name + |
f0dc99bc811c
removed circular dependency of OrthancPluginsCppWrapper with Orthanc::Logging
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5563
diff
changeset
|
365 "\" with MIME type \"" + mime + "\""); |
2169
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
366 } |
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
367 } |
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
368 } |
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
369 |
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
370 |
2167
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
371 static void ReadConfiguration() |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
372 { |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
373 OrthancPlugins::OrthancConfiguration configuration; |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
374 |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
375 { |
2958
bb7a66efbeb1
OrthancPlugins::SetGlobalContext() in OrthancPluginCppWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2447
diff
changeset
|
376 OrthancPlugins::OrthancConfiguration globalConfiguration; |
2167
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
377 globalConfiguration.GetSection(configuration, "ServeFolders"); |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
378 } |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
379 |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
380 if (!configuration.IsSection("Folders")) |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
381 { |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
382 // This is a basic configuration |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
383 ConfigureFolders(configuration.GetJson()); |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
384 } |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
385 else |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
386 { |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
387 // This is an advanced configuration |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
388 ConfigureFolders(configuration.GetJson()["Folders"]); |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
389 |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
390 bool tmp; |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
391 |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
392 if (configuration.LookupBooleanValue(tmp, "AllowCache")) |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
393 { |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
394 allowCache_ = tmp; |
5572
f0dc99bc811c
removed circular dependency of OrthancPluginsCppWrapper with Orthanc::Logging
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5563
diff
changeset
|
395 ORTHANC_PLUGINS_LOG_WARNING("ServeFolders: Requesting the HTTP client to " + |
f0dc99bc811c
removed circular dependency of OrthancPluginsCppWrapper with Orthanc::Logging
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5563
diff
changeset
|
396 std::string(tmp ? "enable" : "disable") + |
f0dc99bc811c
removed circular dependency of OrthancPluginsCppWrapper with Orthanc::Logging
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5563
diff
changeset
|
397 " its caching mechanism"); |
2167
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
398 } |
2168
84033563f7f0
ServeFolders: Better protection against exceptions in the callbacks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2167
diff
changeset
|
399 |
84033563f7f0
ServeFolders: Better protection against exceptions in the callbacks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2167
diff
changeset
|
400 if (configuration.LookupBooleanValue(tmp, "GenerateETag")) |
84033563f7f0
ServeFolders: Better protection against exceptions in the callbacks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2167
diff
changeset
|
401 { |
84033563f7f0
ServeFolders: Better protection against exceptions in the callbacks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2167
diff
changeset
|
402 generateETag_ = tmp; |
5572
f0dc99bc811c
removed circular dependency of OrthancPluginsCppWrapper with Orthanc::Logging
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5563
diff
changeset
|
403 ORTHANC_PLUGINS_LOG_WARNING("ServeFolders: The computation of an ETag for the served resources is " + |
f0dc99bc811c
removed circular dependency of OrthancPluginsCppWrapper with Orthanc::Logging
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5563
diff
changeset
|
404 std::string(tmp ? "enabled" : "disabled")); |
2168
84033563f7f0
ServeFolders: Better protection against exceptions in the callbacks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2167
diff
changeset
|
405 } |
2169
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
406 |
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
407 OrthancPlugins::OrthancConfiguration extensions; |
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
408 configuration.GetSection(extensions, "Extensions"); |
d15de5685ad8
ServeFolders: "Extensions" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2168
diff
changeset
|
409 ConfigureExtensions(extensions.GetJson()); |
2167
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
410 } |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
411 |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
412 if (folders_.empty()) |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
413 { |
5572
f0dc99bc811c
removed circular dependency of OrthancPluginsCppWrapper with Orthanc::Logging
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5563
diff
changeset
|
414 ORTHANC_PLUGINS_LOG_WARNING("ServeFolders: Empty configuration file: No additional folder will be served!"); |
2167
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
415 } |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
416 } |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
417 |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
418 |
1322
f497a72d9f71
fixes to the sample plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
419 extern "C" |
f497a72d9f71
fixes to the sample plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
420 { |
f497a72d9f71
fixes to the sample plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
421 ORTHANC_PLUGINS_API int32_t OrthancPluginInitialize(OrthancPluginContext* context) |
f497a72d9f71
fixes to the sample plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
422 { |
5563 | 423 OrthancPlugins::SetGlobalContext(context, SERVE_FOLDERS_NAME); |
1322
f497a72d9f71
fixes to the sample plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
424 |
f497a72d9f71
fixes to the sample plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
425 /* Check the version of the Orthanc core */ |
2958
bb7a66efbeb1
OrthancPlugins::SetGlobalContext() in OrthancPluginCppWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2447
diff
changeset
|
426 if (OrthancPluginCheckVersion(context) == 0) |
1322
f497a72d9f71
fixes to the sample plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
427 { |
2958
bb7a66efbeb1
OrthancPlugins::SetGlobalContext() in OrthancPluginCppWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2447
diff
changeset
|
428 OrthancPlugins::ReportMinimalOrthancVersion(ORTHANC_PLUGINS_MINIMAL_MAJOR_NUMBER, |
2268
ce5c13b95dac
New function: OrthancPluginRegisterIncomingHttpRequestFilter2()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2244
diff
changeset
|
429 ORTHANC_PLUGINS_MINIMAL_MINOR_NUMBER, |
ce5c13b95dac
New function: OrthancPluginRegisterIncomingHttpRequestFilter2()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2244
diff
changeset
|
430 ORTHANC_PLUGINS_MINIMAL_REVISION_NUMBER); |
1322
f497a72d9f71
fixes to the sample plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
431 return -1; |
f497a72d9f71
fixes to the sample plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
432 } |
f497a72d9f71
fixes to the sample plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
433 |
2166
700dbb3baac9
refactoring in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2062
diff
changeset
|
434 RegisterDefaultExtensions(); |
5538
6ce05f8b5b13
deprecating OrthancPluginSetDescription2(), OrthancPluginExtendOrthancExplorer2() and OrthancPluginSetRootUri2()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5485
diff
changeset
|
435 OrthancPluginSetDescription2(context, SERVE_FOLDERS_NAME, "Serve additional folders with the HTTP server of Orthanc."); |
6ce05f8b5b13
deprecating OrthancPluginSetDescription2(), OrthancPluginExtendOrthancExplorer2() and OrthancPluginSetRootUri2()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5485
diff
changeset
|
436 OrthancPluginSetRootUri2(context, SERVE_FOLDERS_NAME, INDEX_URI); |
2958
bb7a66efbeb1
OrthancPlugins::SetGlobalContext() in OrthancPluginCppWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2447
diff
changeset
|
437 OrthancPlugins::RegisterRestCallback<ListServedFolders>(INDEX_URI, true); |
1322
f497a72d9f71
fixes to the sample plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
438 |
2167
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
439 try |
1323
5a92665dee23
Sample plugin: Serve folders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1322
diff
changeset
|
440 { |
2167
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
441 ReadConfiguration(); |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
442 } |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
443 catch (OrthancPlugins::PluginException& e) |
aa2915963531
"Folders" sub-configuration in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2166
diff
changeset
|
444 { |
5572
f0dc99bc811c
removed circular dependency of OrthancPluginsCppWrapper with Orthanc::Logging
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5563
diff
changeset
|
445 ORTHANC_PLUGINS_LOG_ERROR("Error while initializing the ServeFolders plugin: " + |
f0dc99bc811c
removed circular dependency of OrthancPluginsCppWrapper with Orthanc::Logging
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5563
diff
changeset
|
446 std::string(e.What(context))); |
1323
5a92665dee23
Sample plugin: Serve folders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1322
diff
changeset
|
447 } |
5a92665dee23
Sample plugin: Serve folders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1322
diff
changeset
|
448 |
1322
f497a72d9f71
fixes to the sample plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
449 return 0; |
f497a72d9f71
fixes to the sample plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
450 } |
f497a72d9f71
fixes to the sample plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
451 |
f497a72d9f71
fixes to the sample plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
452 |
f497a72d9f71
fixes to the sample plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
453 ORTHANC_PLUGINS_API void OrthancPluginFinalize() |
f497a72d9f71
fixes to the sample plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
454 { |
f497a72d9f71
fixes to the sample plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
455 } |
f497a72d9f71
fixes to the sample plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
456 |
f497a72d9f71
fixes to the sample plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
457 |
f497a72d9f71
fixes to the sample plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
458 ORTHANC_PLUGINS_API const char* OrthancPluginGetName() |
f497a72d9f71
fixes to the sample plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
459 { |
5538
6ce05f8b5b13
deprecating OrthancPluginSetDescription2(), OrthancPluginExtendOrthancExplorer2() and OrthancPluginSetRootUri2()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5485
diff
changeset
|
460 return SERVE_FOLDERS_NAME; |
1322
f497a72d9f71
fixes to the sample plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
461 } |
f497a72d9f71
fixes to the sample plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
462 |
f497a72d9f71
fixes to the sample plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
463 |
f497a72d9f71
fixes to the sample plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
464 ORTHANC_PLUGINS_API const char* OrthancPluginGetVersion() |
f497a72d9f71
fixes to the sample plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
465 { |
1391
b3119c32c920
version in ServerFolders plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1384
diff
changeset
|
466 return SERVE_FOLDERS_VERSION; |
1322
f497a72d9f71
fixes to the sample plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
467 } |
f497a72d9f71
fixes to the sample plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
468 } |