Brian Silverman | 9be949c | 2015-05-14 00:15:21 -0400 | [diff] [blame] | 1 | #!/usr/bin/env python3 |
Comran Morshed | fe7f9ea | 2015-02-19 23:52:57 +0000 | [diff] [blame] | 2 | |
| 3 | # This file is a modified version of the gen_embedded script included in the |
| 4 | # scripts directory of seasocks (version 1.1.2). It has been modified to |
| 5 | # recursively find the web files itself, which was originally done by piping |
| 6 | # in the results from a "find" shell command. |
| 7 | |
| 8 | # The embedded files includes only those that are required for the server to run |
| 9 | # (including 404 files, a default index page, favicon, etc.) |
| 10 | |
| 11 | import os, os.path, sys |
| 12 | |
Brian Silverman | 049dcb6 | 2015-09-27 19:08:00 -0400 | [diff] [blame] | 13 | output = sys.argv[1].replace('"', '') |
Brian Silverman | 9be949c | 2015-05-14 00:15:21 -0400 | [diff] [blame] | 14 | |
| 15 | if not os.path.exists(os.path.dirname(output)): |
| 16 | os.makedirs(os.path.dirname(output)) |
Comran Morshed | fe7f9ea | 2015-02-19 23:52:57 +0000 | [diff] [blame] | 17 | |
Brian Silverman | 049dcb6 | 2015-09-27 19:08:00 -0400 | [diff] [blame] | 18 | if len(sys.argv) >= 3: |
| 19 | web = sys.argv[2:] |
| 20 | else: |
| 21 | web = [] |
| 22 | for root, dirs, files in os.walk("./www_defaults", topdown=False): |
| 23 | for name in files + dirs: |
| 24 | web.append(os.path.join(root, name)) |
Comran Morshed | fe7f9ea | 2015-02-19 23:52:57 +0000 | [diff] [blame] | 25 | |
Brian Silverman | 049dcb6 | 2015-09-27 19:08:00 -0400 | [diff] [blame] | 26 | with open(output, 'w') as o: |
| 27 | o.write(""" |
Comran Morshed | fe7f9ea | 2015-02-19 23:52:57 +0000 | [diff] [blame] | 28 | #include "internal/Embedded.h" |
| 29 | |
| 30 | #include <string> |
| 31 | #include <unordered_map> |
| 32 | |
| 33 | namespace { |
| 34 | |
| 35 | std::unordered_map<std::string, EmbeddedContent> embedded = { |
| 36 | """) |
| 37 | |
Brian Silverman | 049dcb6 | 2015-09-27 19:08:00 -0400 | [diff] [blame] | 38 | for f in web: |
| 39 | with open(f, 'rb') as file: |
| 40 | bytes = file.read() |
| 41 | o.write('{"/%s", {' % os.path.basename(f)) |
Brian Silverman | 6470f44 | 2018-08-05 12:08:16 -0700 | [diff] [blame] | 42 | o.write('"' + "".join(['\\x%02x' % x for x in bytes]) + '"') |
Brian Silverman | 049dcb6 | 2015-09-27 19:08:00 -0400 | [diff] [blame] | 43 | o.write(',%d }},' % len(bytes)) |
Comran Morshed | fe7f9ea | 2015-02-19 23:52:57 +0000 | [diff] [blame] | 44 | |
Brian Silverman | 049dcb6 | 2015-09-27 19:08:00 -0400 | [diff] [blame] | 45 | o.write(""" |
Comran Morshed | fe7f9ea | 2015-02-19 23:52:57 +0000 | [diff] [blame] | 46 | }; |
| 47 | |
| 48 | } // namespace |
| 49 | |
| 50 | const EmbeddedContent* findEmbeddedContent(const std::string& name) { |
| 51 | auto found = embedded.find(name); |
| 52 | if (found == embedded.end()) { |
| 53 | return NULL; |
| 54 | } |
| 55 | return &found->second; |
| 56 | } |
| 57 | """) |