├── LICENSE ├── README.md ├── app ├── __init__.py ├── errors.py ├── routes.py ├── static │ ├── css │ │ ├── balloon.css │ │ └── responsive_table.css │ ├── faceglitch.gif │ ├── favicon.jpg │ ├── load.gif │ ├── logo.png │ └── semantic │ │ ├── .versions │ │ ├── LICENSE │ │ ├── README.md │ │ ├── fonts │ │ ├── Lato-Black.ttf │ │ ├── Lato-BlackItalic.ttf │ │ ├── Lato-Bold.ttf │ │ ├── Lato-BoldItalic.ttf │ │ ├── Lato-Hairline.ttf │ │ ├── Lato-HairlineItalic.ttf │ │ ├── Lato-Heavy.ttf │ │ ├── Lato-HeavyItalic.ttf │ │ ├── Lato-Italic.ttf │ │ ├── Lato-Light.ttf │ │ ├── Lato-LightItalic.ttf │ │ ├── Lato-Medium.ttf │ │ ├── Lato-MediumItalic.ttf │ │ ├── Lato-Regular.ttf │ │ ├── Lato-Semibold.ttf │ │ ├── Lato-SemiboldItalic.ttf │ │ ├── Lato-Thin.ttf │ │ ├── Lato-ThinItalic.ttf │ │ └── OFL.txt │ │ ├── package.json │ │ ├── semantic.css │ │ └── themes │ │ └── default │ │ └── assets │ │ ├── fonts │ │ ├── brand-icons.eot │ │ ├── brand-icons.svg │ │ ├── brand-icons.ttf │ │ ├── brand-icons.woff │ │ ├── brand-icons.woff2 │ │ ├── icons.eot │ │ ├── icons.otf │ │ ├── icons.svg │ │ ├── icons.ttf │ │ ├── icons.woff │ │ ├── icons.woff2 │ │ ├── outline-icons.eot │ │ ├── outline-icons.svg │ │ ├── outline-icons.ttf │ │ ├── outline-icons.woff │ │ └── outline-icons.woff2 │ │ └── images │ │ └── flags.png └── templates │ ├── base.html │ └── index.html ├── bin └── tmp_img │ └── face.jpeg ├── cloakme.py ├── config.py ├── image.png ├── requirements.txt └── setup.sh /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2018 The Python Packaging Authority 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all 11 | copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 19 | SOFTWARE. 20 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # CloakMe 2 |

3 |

Cloak your face from Big Brother

4 |
5 | 6 | CloakMe is a web interface implementation of the [Fawkes](https://github.com/Shawn-Shan/fawkes) algorithm developed by researchers at SANDLab, University of Chicago. You can check out more information on their [website](http://sandlab.cs.uchicago.edu/fawkes/#code). 7 | 8 | 9 |

Installation

10 | 11 | #### Pre-installation 12 | You will need to install `python3.7` (version must be <3.8), `python3 pip` and `git`. 13 | 14 | #### Quick Installation (Linux Only) 15 | 1. Clone this repository: 16 | 17 | `git clone https://github.com/pluja/CloakMe` 18 | 19 | 2. Change permissions and run setup file: 20 | 21 | `chmod a+x setup.sh` 22 | 23 | `./setup.sh` 24 | 25 | #### Manual Installation 26 | 1. Clone this repository: 27 | 28 | `git clone https://github.com/pluja/CloakMe` 29 | 30 | 2. Move into the directory: 31 | 32 | `cd CloakMe` 33 | 34 | 3. Create a virtual environment: 35 | 36 | `python3 -m venv venv` 37 | 38 | 4. Activate it: 39 | 40 | `source venv/bin/activate` 41 | 42 | 5. Install requirements: 43 | 44 | `python3 -m pip install -r requirements.txt` 45 | 46 | 6. Run the flask server: 47 | 48 | `flask run --host 0.0.0.0` 49 | 50 | 7. Open the url and enjoy: [URL](http://127.0.0.0:5000) 51 | -------------------------------------------------------------------------------- /app/__init__.py: -------------------------------------------------------------------------------- 1 | from flask import Flask 2 | 3 | app = Flask(__name__) 4 | from app import routes -------------------------------------------------------------------------------- /app/errors.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pluja/CloakMe/fd55a994a6d7e096f72700832122920f38e13941/app/errors.py -------------------------------------------------------------------------------- /app/routes.py: -------------------------------------------------------------------------------- 1 | from flask import render_template, flash, redirect, url_for, request, send_from_directory 2 | from werkzeug.utils import secure_filename 3 | from app import app 4 | import subprocess 5 | import uuid 6 | import os 7 | 8 | @app.route('/') 9 | @app.route('/index', methods=['GET', 'POST']) 10 | def index(): 11 | if request.method == 'POST': 12 | # check if the post request has the file part 13 | if 'file' not in request.files: 14 | flash('No file part') 15 | return redirect(request.referrer) 16 | file = request.files['file'] 17 | # if user does not select file, browser also 18 | # submit an empty part without filename 19 | if file.filename == '': 20 | flash('No selected file') 21 | return redirect(request.referrer) 22 | if file: 23 | folder = str(uuid.uuid1()) 24 | os.mkdir('app/'+folder) 25 | fileName = cloak(file, folder) 26 | return send_from_directory(folder, fileName, as_attachment=True) 27 | else: 28 | return render_template('index.html') 29 | 30 | def cloak(file, folder): 31 | file.save(os.path.join('app/'+folder, file.filename)) 32 | args = ("bin/fawkes", "--directory", 'app/'+folder) 33 | #Or just: 34 | #args = "bin/bar -c somefile.xml -d text.txt -r aString -f anotherString".split() 35 | popen = subprocess.Popen(args, stdout=subprocess.PIPE) 36 | popen.wait() 37 | output = popen.stdout.read() 38 | cloakedFile = file.filename.split(".")[0]+"_min_cloaked.png" 39 | return cloakedFile -------------------------------------------------------------------------------- /app/static/css/balloon.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --balloon-border-radius: 2px; 3 | --balloon-color: rgba(16, 16, 16, 0.95); 4 | --balloon-text-color: #fff; 5 | --balloon-font-size: 12px; 6 | --balloon-move: 4px; } 7 | 8 | button[aria-label][data-balloon-pos] { 9 | overflow: visible; } 10 | 11 | [aria-label][data-balloon-pos] { 12 | position: relative; 13 | cursor: pointer; } 14 | [aria-label][data-balloon-pos]:after { 15 | opacity: 0; 16 | pointer-events: none; 17 | transition: all 0.18s ease-out 0.18s; 18 | text-indent: 0; 19 | font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif; 20 | font-weight: normal; 21 | font-style: normal; 22 | text-shadow: none; 23 | font-size: var(--balloon-font-size); 24 | background: var(--balloon-color); 25 | border-radius: 2px; 26 | color: var(--balloon-text-color); 27 | border-radius: var(--balloon-border-radius); 28 | content: attr(aria-label); 29 | padding: .5em 1em; 30 | position: absolute; 31 | white-space: nowrap; 32 | z-index: 10; } 33 | [aria-label][data-balloon-pos]:before { 34 | width: 0; 35 | height: 0; 36 | border: 5px solid transparent; 37 | border-top-color: var(--balloon-color); 38 | opacity: 0; 39 | pointer-events: none; 40 | transition: all 0.18s ease-out 0.18s; 41 | content: ""; 42 | position: absolute; 43 | z-index: 10; } 44 | [aria-label][data-balloon-pos]:hover:before, [aria-label][data-balloon-pos]:hover:after, [aria-label][data-balloon-pos][data-balloon-visible]:before, [aria-label][data-balloon-pos][data-balloon-visible]:after, [aria-label][data-balloon-pos]:not([data-balloon-nofocus]):focus:before, [aria-label][data-balloon-pos]:not([data-balloon-nofocus]):focus:after { 45 | opacity: 1; 46 | pointer-events: none; } 47 | [aria-label][data-balloon-pos].font-awesome:after { 48 | font-family: FontAwesome, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; } 49 | [aria-label][data-balloon-pos][data-balloon-break]:after { 50 | white-space: pre; } 51 | [aria-label][data-balloon-pos][data-balloon-break][data-balloon-length]:after { 52 | white-space: pre-line; 53 | word-break: break-word; } 54 | [aria-label][data-balloon-pos][data-balloon-blunt]:before, [aria-label][data-balloon-pos][data-balloon-blunt]:after { 55 | transition: none; } 56 | [aria-label][data-balloon-pos][data-balloon-pos="up"]:after { 57 | bottom: 100%; 58 | left: 50%; 59 | margin-bottom: 10px; 60 | transform: translate(-50%, var(--balloon-move)); 61 | transform-origin: top; } 62 | [aria-label][data-balloon-pos][data-balloon-pos="up"]:before { 63 | bottom: 100%; 64 | left: 50%; 65 | transform: translate(-50%, var(--balloon-move)); 66 | transform-origin: top; } 67 | [aria-label][data-balloon-pos][data-balloon-pos="up"]:hover:after, [aria-label][data-balloon-pos][data-balloon-pos="up"][data-balloon-visible]:after { 68 | transform: translate(-50%, 0); } 69 | [aria-label][data-balloon-pos][data-balloon-pos="up"]:hover:before, [aria-label][data-balloon-pos][data-balloon-pos="up"][data-balloon-visible]:before { 70 | transform: translate(-50%, 0); } 71 | [aria-label][data-balloon-pos][data-balloon-pos="up-left"]:after { 72 | bottom: 100%; 73 | left: 0; 74 | margin-bottom: 10px; 75 | transform: translate(0, var(--balloon-move)); 76 | transform-origin: top; } 77 | [aria-label][data-balloon-pos][data-balloon-pos="up-left"]:before { 78 | bottom: 100%; 79 | left: 5px; 80 | transform: translate(0, var(--balloon-move)); 81 | transform-origin: top; } 82 | [aria-label][data-balloon-pos][data-balloon-pos="up-left"]:hover:after, [aria-label][data-balloon-pos][data-balloon-pos="up-left"][data-balloon-visible]:after { 83 | transform: translate(0, 0); } 84 | [aria-label][data-balloon-pos][data-balloon-pos="up-left"]:hover:before, [aria-label][data-balloon-pos][data-balloon-pos="up-left"][data-balloon-visible]:before { 85 | transform: translate(0, 0); } 86 | [aria-label][data-balloon-pos][data-balloon-pos="up-right"]:after { 87 | bottom: 100%; 88 | right: 0; 89 | margin-bottom: 10px; 90 | transform: translate(0, var(--balloon-move)); 91 | transform-origin: top; } 92 | [aria-label][data-balloon-pos][data-balloon-pos="up-right"]:before { 93 | bottom: 100%; 94 | right: 5px; 95 | transform: translate(0, var(--balloon-move)); 96 | transform-origin: top; } 97 | [aria-label][data-balloon-pos][data-balloon-pos="up-right"]:hover:after, [aria-label][data-balloon-pos][data-balloon-pos="up-right"][data-balloon-visible]:after { 98 | transform: translate(0, 0); } 99 | [aria-label][data-balloon-pos][data-balloon-pos="up-right"]:hover:before, [aria-label][data-balloon-pos][data-balloon-pos="up-right"][data-balloon-visible]:before { 100 | transform: translate(0, 0); } 101 | [aria-label][data-balloon-pos][data-balloon-pos="down"]:after { 102 | left: 50%; 103 | margin-top: 10px; 104 | top: 100%; 105 | transform: translate(-50%, calc(var(--balloon-move) * -1)); } 106 | [aria-label][data-balloon-pos][data-balloon-pos="down"]:before { 107 | width: 0; 108 | height: 0; 109 | border: 5px solid transparent; 110 | border-bottom-color: var(--balloon-color); 111 | left: 50%; 112 | top: 100%; 113 | transform: translate(-50%, calc(var(--balloon-move) * -1)); } 114 | [aria-label][data-balloon-pos][data-balloon-pos="down"]:hover:after, [aria-label][data-balloon-pos][data-balloon-pos="down"][data-balloon-visible]:after { 115 | transform: translate(-50%, 0); } 116 | [aria-label][data-balloon-pos][data-balloon-pos="down"]:hover:before, [aria-label][data-balloon-pos][data-balloon-pos="down"][data-balloon-visible]:before { 117 | transform: translate(-50%, 0); } 118 | [aria-label][data-balloon-pos][data-balloon-pos="down-left"]:after { 119 | left: 0; 120 | margin-top: 10px; 121 | top: 100%; 122 | transform: translate(0, calc(var(--balloon-move) * -1)); } 123 | [aria-label][data-balloon-pos][data-balloon-pos="down-left"]:before { 124 | width: 0; 125 | height: 0; 126 | border: 5px solid transparent; 127 | border-bottom-color: var(--balloon-color); 128 | left: 5px; 129 | top: 100%; 130 | transform: translate(0, calc(var(--balloon-move) * -1)); } 131 | [aria-label][data-balloon-pos][data-balloon-pos="down-left"]:hover:after, [aria-label][data-balloon-pos][data-balloon-pos="down-left"][data-balloon-visible]:after { 132 | transform: translate(0, 0); } 133 | [aria-label][data-balloon-pos][data-balloon-pos="down-left"]:hover:before, [aria-label][data-balloon-pos][data-balloon-pos="down-left"][data-balloon-visible]:before { 134 | transform: translate(0, 0); } 135 | [aria-label][data-balloon-pos][data-balloon-pos="down-right"]:after { 136 | right: 0; 137 | margin-top: 10px; 138 | top: 100%; 139 | transform: translate(0, calc(var(--balloon-move) * -1)); } 140 | [aria-label][data-balloon-pos][data-balloon-pos="down-right"]:before { 141 | width: 0; 142 | height: 0; 143 | border: 5px solid transparent; 144 | border-bottom-color: var(--balloon-color); 145 | right: 5px; 146 | top: 100%; 147 | transform: translate(0, calc(var(--balloon-move) * -1)); } 148 | [aria-label][data-balloon-pos][data-balloon-pos="down-right"]:hover:after, [aria-label][data-balloon-pos][data-balloon-pos="down-right"][data-balloon-visible]:after { 149 | transform: translate(0, 0); } 150 | [aria-label][data-balloon-pos][data-balloon-pos="down-right"]:hover:before, [aria-label][data-balloon-pos][data-balloon-pos="down-right"][data-balloon-visible]:before { 151 | transform: translate(0, 0); } 152 | [aria-label][data-balloon-pos][data-balloon-pos="left"]:after { 153 | margin-right: 10px; 154 | right: 100%; 155 | top: 50%; 156 | transform: translate(var(--balloon-move), -50%); } 157 | [aria-label][data-balloon-pos][data-balloon-pos="left"]:before { 158 | width: 0; 159 | height: 0; 160 | border: 5px solid transparent; 161 | border-left-color: var(--balloon-color); 162 | right: 100%; 163 | top: 50%; 164 | transform: translate(var(--balloon-move), -50%); } 165 | [aria-label][data-balloon-pos][data-balloon-pos="left"]:hover:after, [aria-label][data-balloon-pos][data-balloon-pos="left"][data-balloon-visible]:after { 166 | transform: translate(0, -50%); } 167 | [aria-label][data-balloon-pos][data-balloon-pos="left"]:hover:before, [aria-label][data-balloon-pos][data-balloon-pos="left"][data-balloon-visible]:before { 168 | transform: translate(0, -50%); } 169 | [aria-label][data-balloon-pos][data-balloon-pos="right"]:after { 170 | left: 100%; 171 | margin-left: 10px; 172 | top: 50%; 173 | transform: translate(calc(var(--balloon-move) * -1), -50%); } 174 | [aria-label][data-balloon-pos][data-balloon-pos="right"]:before { 175 | width: 0; 176 | height: 0; 177 | border: 5px solid transparent; 178 | border-right-color: var(--balloon-color); 179 | left: 100%; 180 | top: 50%; 181 | transform: translate(calc(var(--balloon-move) * -1), -50%); } 182 | [aria-label][data-balloon-pos][data-balloon-pos="right"]:hover:after, [aria-label][data-balloon-pos][data-balloon-pos="right"][data-balloon-visible]:after { 183 | transform: translate(0, -50%); } 184 | [aria-label][data-balloon-pos][data-balloon-pos="right"]:hover:before, [aria-label][data-balloon-pos][data-balloon-pos="right"][data-balloon-visible]:before { 185 | transform: translate(0, -50%); } 186 | [aria-label][data-balloon-pos][data-balloon-length="small"]:after { 187 | white-space: normal; 188 | width: 80px; } 189 | [aria-label][data-balloon-pos][data-balloon-length="medium"]:after { 190 | white-space: normal; 191 | width: 150px; } 192 | [aria-label][data-balloon-pos][data-balloon-length="large"]:after { 193 | white-space: normal; 194 | width: 260px; } 195 | [aria-label][data-balloon-pos][data-balloon-length="xlarge"]:after { 196 | white-space: normal; 197 | width: 380px; } 198 | @media screen and (max-width: 768px) { 199 | [aria-label][data-balloon-pos][data-balloon-length="xlarge"]:after { 200 | white-space: normal; 201 | width: 90vw; } } 202 | [aria-label][data-balloon-pos][data-balloon-length="fit"]:after { 203 | white-space: normal; 204 | width: 100%; } -------------------------------------------------------------------------------- /app/static/css/responsive_table.css: -------------------------------------------------------------------------------- 1 | @media only screen and (max-width: 760px),(min-device-width: 768px) and (max-device-width: 1024px) { 2 | 3 | /* Force table to not be like tables anymore */ 4 | table, thead, tbody, th, td, tr { 5 | display: block; 6 | } 7 | 8 | /* Hide table headers (but not display: none;, for accessibility) */ 9 | thead tr { 10 | position: absolute; 11 | padding-left: 3em; 12 | top: -9999px; 13 | left: -9999px; 14 | } 15 | 16 | tr { border: 1px solid #ccc; } 17 | 18 | td { 19 | /* Behave like a "row" */ 20 | border: none; 21 | border-bottom: 1px solid #eee; 22 | position: relative; 23 | padding-left: 50% !important; 24 | } 25 | 26 | td:before { 27 | /* Now like a table header */ 28 | position: absolute; 29 | /* Top/left values mimic padding */ 30 | top: 1em; 31 | left: 1em; 32 | width: 45%; 33 | padding-right: 10px; 34 | white-space: nowrap; 35 | } 36 | 37 | /* 38 | Label the data 39 | */ 40 | td:nth-of-type(1):before { content: "Name"; } 41 | td:nth-of-type(2):before { content: "BTC"; } 42 | td:nth-of-type(3):before { content: "XMR"; } 43 | td:nth-of-type(4):before { content: "Conditions"; } 44 | td:nth-of-type(5):before { content: "Exchange"; } 45 | td:nth-of-type(6):before { content: "Buy"; } 46 | } -------------------------------------------------------------------------------- /app/static/faceglitch.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pluja/CloakMe/fd55a994a6d7e096f72700832122920f38e13941/app/static/faceglitch.gif -------------------------------------------------------------------------------- /app/static/favicon.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pluja/CloakMe/fd55a994a6d7e096f72700832122920f38e13941/app/static/favicon.jpg -------------------------------------------------------------------------------- /app/static/load.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pluja/CloakMe/fd55a994a6d7e096f72700832122920f38e13941/app/static/load.gif -------------------------------------------------------------------------------- /app/static/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pluja/CloakMe/fd55a994a6d7e096f72700832122920f38e13941/app/static/logo.png -------------------------------------------------------------------------------- /app/static/semantic/.versions: -------------------------------------------------------------------------------- 1 | jquery@1.11.3_2 2 | meteor@1.1.6 3 | semantic:ui-css@2.0.7 4 | underscore@1.0.3 5 | -------------------------------------------------------------------------------- /app/static/semantic/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Semantic Org 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /app/static/semantic/README.md: -------------------------------------------------------------------------------- 1 | # CSS Distribution 2 | 3 | This repository is automatically synced with the main [Semantic UI](https://github.com/Semantic-Org/Semantic-UI) repository to provide lightweight CSS only version of Semantic UI. 4 | 5 | This package **does not support theming** and includes generated CSS files of the default theme only. 6 | 7 | You can view more on Semantic UI at [LearnSemantic.com](http://www.learnsemantic.com) and [Semantic-UI.com](http://www.semantic-ui.com) 8 | -------------------------------------------------------------------------------- /app/static/semantic/fonts/Lato-Black.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pluja/CloakMe/fd55a994a6d7e096f72700832122920f38e13941/app/static/semantic/fonts/Lato-Black.ttf -------------------------------------------------------------------------------- /app/static/semantic/fonts/Lato-BlackItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pluja/CloakMe/fd55a994a6d7e096f72700832122920f38e13941/app/static/semantic/fonts/Lato-BlackItalic.ttf -------------------------------------------------------------------------------- /app/static/semantic/fonts/Lato-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pluja/CloakMe/fd55a994a6d7e096f72700832122920f38e13941/app/static/semantic/fonts/Lato-Bold.ttf -------------------------------------------------------------------------------- /app/static/semantic/fonts/Lato-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pluja/CloakMe/fd55a994a6d7e096f72700832122920f38e13941/app/static/semantic/fonts/Lato-BoldItalic.ttf -------------------------------------------------------------------------------- /app/static/semantic/fonts/Lato-Hairline.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pluja/CloakMe/fd55a994a6d7e096f72700832122920f38e13941/app/static/semantic/fonts/Lato-Hairline.ttf -------------------------------------------------------------------------------- /app/static/semantic/fonts/Lato-HairlineItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pluja/CloakMe/fd55a994a6d7e096f72700832122920f38e13941/app/static/semantic/fonts/Lato-HairlineItalic.ttf -------------------------------------------------------------------------------- /app/static/semantic/fonts/Lato-Heavy.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pluja/CloakMe/fd55a994a6d7e096f72700832122920f38e13941/app/static/semantic/fonts/Lato-Heavy.ttf -------------------------------------------------------------------------------- /app/static/semantic/fonts/Lato-HeavyItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pluja/CloakMe/fd55a994a6d7e096f72700832122920f38e13941/app/static/semantic/fonts/Lato-HeavyItalic.ttf -------------------------------------------------------------------------------- /app/static/semantic/fonts/Lato-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pluja/CloakMe/fd55a994a6d7e096f72700832122920f38e13941/app/static/semantic/fonts/Lato-Italic.ttf -------------------------------------------------------------------------------- /app/static/semantic/fonts/Lato-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pluja/CloakMe/fd55a994a6d7e096f72700832122920f38e13941/app/static/semantic/fonts/Lato-Light.ttf -------------------------------------------------------------------------------- /app/static/semantic/fonts/Lato-LightItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pluja/CloakMe/fd55a994a6d7e096f72700832122920f38e13941/app/static/semantic/fonts/Lato-LightItalic.ttf -------------------------------------------------------------------------------- /app/static/semantic/fonts/Lato-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pluja/CloakMe/fd55a994a6d7e096f72700832122920f38e13941/app/static/semantic/fonts/Lato-Medium.ttf -------------------------------------------------------------------------------- /app/static/semantic/fonts/Lato-MediumItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pluja/CloakMe/fd55a994a6d7e096f72700832122920f38e13941/app/static/semantic/fonts/Lato-MediumItalic.ttf -------------------------------------------------------------------------------- /app/static/semantic/fonts/Lato-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pluja/CloakMe/fd55a994a6d7e096f72700832122920f38e13941/app/static/semantic/fonts/Lato-Regular.ttf -------------------------------------------------------------------------------- /app/static/semantic/fonts/Lato-Semibold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pluja/CloakMe/fd55a994a6d7e096f72700832122920f38e13941/app/static/semantic/fonts/Lato-Semibold.ttf -------------------------------------------------------------------------------- /app/static/semantic/fonts/Lato-SemiboldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pluja/CloakMe/fd55a994a6d7e096f72700832122920f38e13941/app/static/semantic/fonts/Lato-SemiboldItalic.ttf -------------------------------------------------------------------------------- /app/static/semantic/fonts/Lato-Thin.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pluja/CloakMe/fd55a994a6d7e096f72700832122920f38e13941/app/static/semantic/fonts/Lato-Thin.ttf -------------------------------------------------------------------------------- /app/static/semantic/fonts/Lato-ThinItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pluja/CloakMe/fd55a994a6d7e096f72700832122920f38e13941/app/static/semantic/fonts/Lato-ThinItalic.ttf -------------------------------------------------------------------------------- /app/static/semantic/fonts/OFL.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2010-2015, Łukasz Dziedzic (dziedzic@typoland.com), 2 | with Reserved Font Name Lato. 3 | 4 | This Font Software is licensed under the SIL Open Font License, Version 1.1. 5 | This license is copied below, and is also available with a FAQ at: 6 | http://scripts.sil.org/OFL 7 | 8 | 9 | ----------------------------------------------------------- 10 | SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 11 | ----------------------------------------------------------- 12 | 13 | PREAMBLE 14 | The goals of the Open Font License (OFL) are to stimulate worldwide 15 | development of collaborative font projects, to support the font creation 16 | efforts of academic and linguistic communities, and to provide a free and 17 | open framework in which fonts may be shared and improved in partnership 18 | with others. 19 | 20 | The OFL allows the licensed fonts to be used, studied, modified and 21 | redistributed freely as long as they are not sold by themselves. The 22 | fonts, including any derivative works, can be bundled, embedded, 23 | redistributed and/or sold with any software provided that any reserved 24 | names are not used by derivative works. The fonts and derivatives, 25 | however, cannot be released under any other type of license. The 26 | requirement for fonts to remain under this license does not apply 27 | to any document created using the fonts or their derivatives. 28 | 29 | DEFINITIONS 30 | "Font Software" refers to the set of files released by the Copyright 31 | Holder(s) under this license and clearly marked as such. This may 32 | include source files, build scripts and documentation. 33 | 34 | "Reserved Font Name" refers to any names specified as such after the 35 | copyright statement(s). 36 | 37 | "Original Version" refers to the collection of Font Software components as 38 | distributed by the Copyright Holder(s). 39 | 40 | "Modified Version" refers to any derivative made by adding to, deleting, 41 | or substituting -- in part or in whole -- any of the components of the 42 | Original Version, by changing formats or by porting the Font Software to a 43 | new environment. 44 | 45 | "Author" refers to any designer, engineer, programmer, technical 46 | writer or other person who contributed to the Font Software. 47 | 48 | PERMISSION & CONDITIONS 49 | Permission is hereby granted, free of charge, to any person obtaining 50 | a copy of the Font Software, to use, study, copy, merge, embed, modify, 51 | redistribute, and sell modified and unmodified copies of the Font 52 | Software, subject to the following conditions: 53 | 54 | 1) Neither the Font Software nor any of its individual components, 55 | in Original or Modified Versions, may be sold by itself. 56 | 57 | 2) Original or Modified Versions of the Font Software may be bundled, 58 | redistributed and/or sold with any software, provided that each copy 59 | contains the above copyright notice and this license. These can be 60 | included either as stand-alone text files, human-readable headers or 61 | in the appropriate machine-readable metadata fields within text or 62 | binary files as long as those fields can be easily viewed by the user. 63 | 64 | 3) No Modified Version of the Font Software may use the Reserved Font 65 | Name(s) unless explicit written permission is granted by the corresponding 66 | Copyright Holder. This restriction only applies to the primary font name as 67 | presented to the users. 68 | 69 | 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font 70 | Software shall not be used to promote, endorse or advertise any 71 | Modified Version, except to acknowledge the contribution(s) of the 72 | Copyright Holder(s) and the Author(s) or with their explicit written 73 | permission. 74 | 75 | 5) The Font Software, modified or unmodified, in part or in whole, 76 | must be distributed entirely under this license, and must not be 77 | distributed under any other license. The requirement for fonts to 78 | remain under this license does not apply to any document created 79 | using the Font Software. 80 | 81 | TERMINATION 82 | This license becomes null and void if any of the above conditions are 83 | not met. 84 | 85 | DISCLAIMER 86 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 87 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF 88 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT 89 | OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE 90 | COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 91 | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL 92 | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 93 | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM 94 | OTHER DEALINGS IN THE FONT SOFTWARE. 95 | -------------------------------------------------------------------------------- /app/static/semantic/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "semantic-ui-css", 3 | "version": "2.4.1", 4 | "title": "Semantic UI", 5 | "description": "CSS Only distribution of Semantic UI", 6 | "homepage": "http://www.semantic-ui.com", 7 | "author": "Jack Lukic ", 8 | "license": "MIT", 9 | "main": "semantic.js", 10 | "repository": { 11 | "type": "git", 12 | "url": "git://github.com/Semantic-Org/Semantic-UI-CSS.git" 13 | }, 14 | "bugs": { 15 | "url": "https://github.com/Semantic-Org/Semantic-UI/issues" 16 | }, 17 | "dependencies": { 18 | "jquery": "x.*" 19 | } 20 | } -------------------------------------------------------------------------------- /app/static/semantic/themes/default/assets/fonts/brand-icons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pluja/CloakMe/fd55a994a6d7e096f72700832122920f38e13941/app/static/semantic/themes/default/assets/fonts/brand-icons.eot -------------------------------------------------------------------------------- /app/static/semantic/themes/default/assets/fonts/brand-icons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pluja/CloakMe/fd55a994a6d7e096f72700832122920f38e13941/app/static/semantic/themes/default/assets/fonts/brand-icons.ttf -------------------------------------------------------------------------------- /app/static/semantic/themes/default/assets/fonts/brand-icons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pluja/CloakMe/fd55a994a6d7e096f72700832122920f38e13941/app/static/semantic/themes/default/assets/fonts/brand-icons.woff -------------------------------------------------------------------------------- /app/static/semantic/themes/default/assets/fonts/brand-icons.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pluja/CloakMe/fd55a994a6d7e096f72700832122920f38e13941/app/static/semantic/themes/default/assets/fonts/brand-icons.woff2 -------------------------------------------------------------------------------- /app/static/semantic/themes/default/assets/fonts/icons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pluja/CloakMe/fd55a994a6d7e096f72700832122920f38e13941/app/static/semantic/themes/default/assets/fonts/icons.eot -------------------------------------------------------------------------------- /app/static/semantic/themes/default/assets/fonts/icons.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pluja/CloakMe/fd55a994a6d7e096f72700832122920f38e13941/app/static/semantic/themes/default/assets/fonts/icons.otf -------------------------------------------------------------------------------- /app/static/semantic/themes/default/assets/fonts/icons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pluja/CloakMe/fd55a994a6d7e096f72700832122920f38e13941/app/static/semantic/themes/default/assets/fonts/icons.ttf -------------------------------------------------------------------------------- /app/static/semantic/themes/default/assets/fonts/icons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pluja/CloakMe/fd55a994a6d7e096f72700832122920f38e13941/app/static/semantic/themes/default/assets/fonts/icons.woff -------------------------------------------------------------------------------- /app/static/semantic/themes/default/assets/fonts/icons.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pluja/CloakMe/fd55a994a6d7e096f72700832122920f38e13941/app/static/semantic/themes/default/assets/fonts/icons.woff2 -------------------------------------------------------------------------------- /app/static/semantic/themes/default/assets/fonts/outline-icons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pluja/CloakMe/fd55a994a6d7e096f72700832122920f38e13941/app/static/semantic/themes/default/assets/fonts/outline-icons.eot -------------------------------------------------------------------------------- /app/static/semantic/themes/default/assets/fonts/outline-icons.svg: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | 10 | 15 | 16 | 19 | 22 | 25 | 28 | 31 | 34 | 37 | 40 | 43 | 46 | 49 | 52 | 55 | 58 | 61 | 64 | 67 | 70 | 73 | 76 | 79 | 82 | 85 | 88 | 91 | 94 | 97 | 100 | 103 | 106 | 109 | 112 | 115 | 118 | 121 | 124 | 127 | 130 | 133 | 136 | 139 | 142 | 145 | 148 | 151 | 154 | 157 | 160 | 163 | 166 | 169 | 172 | 175 | 178 | 181 | 184 | 187 | 190 | 193 | 196 | 199 | 202 | 205 | 208 | 211 | 214 | 217 | 220 | 223 | 226 | 229 | 232 | 235 | 238 | 241 | 244 | 247 | 250 | 253 | 256 | 259 | 262 | 265 | 268 | 271 | 274 | 277 | 280 | 283 | 286 | 289 | 292 | 295 | 298 | 301 | 304 | 307 | 310 | 313 | 316 | 319 | 322 | 325 | 328 | 331 | 334 | 337 | 340 | 343 | 346 | 349 | 352 | 355 | 358 | 361 | 364 | 365 | 366 | 367 | -------------------------------------------------------------------------------- /app/static/semantic/themes/default/assets/fonts/outline-icons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pluja/CloakMe/fd55a994a6d7e096f72700832122920f38e13941/app/static/semantic/themes/default/assets/fonts/outline-icons.ttf -------------------------------------------------------------------------------- /app/static/semantic/themes/default/assets/fonts/outline-icons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pluja/CloakMe/fd55a994a6d7e096f72700832122920f38e13941/app/static/semantic/themes/default/assets/fonts/outline-icons.woff -------------------------------------------------------------------------------- /app/static/semantic/themes/default/assets/fonts/outline-icons.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pluja/CloakMe/fd55a994a6d7e096f72700832122920f38e13941/app/static/semantic/themes/default/assets/fonts/outline-icons.woff2 -------------------------------------------------------------------------------- /app/static/semantic/themes/default/assets/images/flags.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pluja/CloakMe/fd55a994a6d7e096f72700832122920f38e13941/app/static/semantic/themes/default/assets/images/flags.png -------------------------------------------------------------------------------- /app/templates/base.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | CloakMe 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | {% with messages = get_flashed_messages() %} 16 | {% if messages %} 17 |
18 |
19 | Information 20 |
21 | 26 |
27 | 28 | {% endif %} 29 | {% endwith %} 30 | 31 | {% block content %}{% endblock %} 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /app/templates/index.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | 11 | 12 | {% block content %} 13 |
14 | 15 |

16 | Header image 17 |
18 | CloakMe 19 |
Cloak your face from facial recognition.
20 |
21 |

22 | 23 |
24 |
25 |
26 |
27 |
28 | 29 |

30 |
31 |
    32 |
  1. Upload an image to cloak a face.
  2. 33 |
  3. It may take up to 60 seconds to process an image.
  4. 34 |
  5. Fawkes algorithm will be applied.
  6. 35 |
  7. The image will be downloaded automatically.
  8. 36 |
37 |
38 |
39 |
40 |
41 | 42 | 43 |
44 | 50 | {% endblock %} -------------------------------------------------------------------------------- /bin/tmp_img/face.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pluja/CloakMe/fd55a994a6d7e096f72700832122920f38e13941/bin/tmp_img/face.jpeg -------------------------------------------------------------------------------- /cloakme.py: -------------------------------------------------------------------------------- 1 | from app import app -------------------------------------------------------------------------------- /config.py: -------------------------------------------------------------------------------- 1 | import os 2 | basedir = os.path.abspath(os.path.dirname(__file__)) -------------------------------------------------------------------------------- /image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pluja/CloakMe/fd55a994a6d7e096f72700832122920f38e13941/image.png -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | click==7.1.2 2 | Flask==1.1.2 3 | itsdangerous==1.1.0 4 | Jinja2==2.11.2 5 | MarkupSafe==1.1.1 6 | PyYAML==5.3.1 7 | Werkzeug==1.0.1 8 | -------------------------------------------------------------------------------- /setup.sh: -------------------------------------------------------------------------------- 1 | echo "Setting up a Python virtual environment..." 2 | python3 -m venv venv 3 | source venv/bin/activate 4 | echo "Installing requirements..." 5 | pip3 install -r requirements.txt 6 | echo "Getting Fawkes algorithm binaries..." 7 | wget "https://mirror.cs.uchicago.edu/fawkes/files/fawkes_binary_linux-v0.3.zip" 8 | echo "Preparing the enviroment" 9 | unzip fawkes_binary_linux-v0.3.zip 10 | rm -rf __MACOSX fawkes_binary_linux-v0.3.zip 11 | mv protection-v0.3 fawkes 12 | chmod a+x fawkes 13 | mv fawkes bin/ 14 | echo "Running the flask server" 15 | flask run --host 0.0.0.0 --------------------------------------------------------------------------------