├── .gitignore ├── README.md ├── chrome ├── background.js ├── flashproxy.js ├── images │ ├── active_icon.png │ ├── cupcake128.png │ ├── cupcake24.png │ ├── cupcake36.png │ ├── cupcake48.png │ ├── disabled_icon.png │ └── grey_icon.png ├── license.txt ├── manifest.json ├── menu.html ├── menu.js └── style.css ├── license.txt ├── meta ├── 440x280.png ├── cupcake-otf.png ├── cupcake_logo64.png ├── cupcake_logo_big.png └── cupcake_screenshot1.png ├── old_versions ├── experiments │ ├── facebook │ │ ├── apps │ │ │ └── connect-four │ │ │ │ ├── analytics.js │ │ │ │ ├── css │ │ │ │ ├── coder.ttf │ │ │ │ └── style.css │ │ │ │ ├── img │ │ │ │ ├── ecailles.png │ │ │ │ └── favicon.png │ │ │ │ ├── index.html │ │ │ │ └── js │ │ │ │ ├── cnnctfr.js │ │ │ │ ├── jquery.color.js │ │ │ │ ├── jquery.js │ │ │ │ └── talk.js │ │ └── iframe.html │ ├── flex │ │ ├── basic_shim.mxml │ │ ├── demo1.mxml │ │ └── libs │ │ │ └── notes.md │ └── img-embed │ │ └── ideas.md ├── v1.5 │ ├── chrome │ │ ├── background.js │ │ ├── flashproxy.js │ │ ├── images │ │ │ ├── active_icon.png │ │ │ ├── cupcake128.png │ │ │ ├── cupcake24.png │ │ │ ├── cupcake36.png │ │ │ ├── cupcake48.png │ │ │ ├── disabled_icon.png │ │ │ └── grey_icon.png │ │ ├── license.txt │ │ ├── manifest.json │ │ ├── menu.html │ │ ├── menu.js │ │ └── style.css │ ├── drupal6 │ │ ├── cupcake.info │ │ └── cupcake.module │ ├── drupal7 │ │ ├── cupcake_bridge.info │ │ ├── cupcake_bridge.module │ │ └── theme │ │ │ ├── cupcake-bridge-iframe.tpl.php │ │ │ └── cupcake_bridge.theme.inc │ ├── firefox │ │ ├── chrome.manifest │ │ ├── data │ │ │ ├── commProxy.js │ │ │ ├── flashproxy.html │ │ │ ├── flashproxy.js │ │ │ ├── images │ │ │ │ ├── active_icon.png │ │ │ │ ├── cupcake128.png │ │ │ │ ├── cupcake24.png │ │ │ │ ├── cupcake36.png │ │ │ │ ├── cupcake48.png │ │ │ │ ├── disabled_icon.png │ │ │ │ └── grey_icon.png │ │ │ ├── menu.html │ │ │ ├── menu.js │ │ │ ├── pageworker.js │ │ │ └── style.css │ │ ├── install.rdf │ │ ├── lib │ │ │ └── main.js │ │ ├── package.json │ │ └── test │ │ │ └── test-main.js │ ├── opera │ │ ├── background.js │ │ ├── flashproxy.js │ │ ├── images │ │ │ ├── active_icon.png │ │ │ ├── badge-en.png │ │ │ ├── badge.png │ │ │ ├── bg.jpg │ │ │ ├── cupcake128.png │ │ │ ├── cupcake24.png │ │ │ ├── cupcake36.png │ │ │ ├── cupcake48.png │ │ │ └── disabled_icon.png │ │ ├── license.txt │ │ ├── manifest.json │ │ ├── menu.html │ │ ├── menu.js │ │ └── style.css │ └── safari │ │ ├── images │ │ ├── badge.png │ │ ├── bg.png │ │ ├── cupcake128.png │ │ ├── cupcake19.png │ │ ├── cupcake24.png │ │ └── cupcake48.png │ │ ├── license.txt │ │ ├── manifest.json │ │ ├── menu.html │ │ ├── proxy.html │ │ └── style.css └── v1 │ ├── translation_strings │ ├── Brazilian Portuguese │ │ ├── for_use_cupcake_chrome-description_pt_BR.txt │ │ ├── for_use_cupcake_chrome-menu_pt_BR.txt │ │ ├── for_use_cupcake_chrome-proxy_pt_BR.txt │ │ └── for_use_cupcake_misc-strings_pt_BR.txt │ ├── Chinese │ │ ├── for_use_cupcake_chrome-menu_zh.txt │ │ ├── for_use_cupcake_chrome-proxy_zh.txt │ │ └── for_use_cupcake_misc-strings_zh.txt │ ├── English │ │ ├── chrome-menu.txt │ │ ├── chrome-proxy.txt │ │ ├── description.txt │ │ └── misc-strings.txt │ ├── Farsi │ │ ├── for_use_cupcake_chrome-description_fa.txt │ │ ├── for_use_cupcake_chrome-menu_fa.txt │ │ ├── for_use_cupcake_chrome-proxy_fa.txt │ │ └── for_use_cupcake_misc-strings_fa.txt │ ├── French │ │ ├── for_use_cupcake_chrome-description_fr.txt │ │ ├── for_use_cupcake_chrome-menu_fr.txt │ │ ├── for_use_cupcake_chrome-proxy_fr.txt │ │ └── for_use_cupcake_misc-strings_fr.txt │ ├── Russian │ │ ├── for_use_cupcake_chrome-description_ru.txt │ │ ├── for_use_cupcake_chrome-menu_ru.txt │ │ ├── for_use_cupcake_chrome-proxy_ru.txt │ │ └── for_use_cupcake_misc-strings_ru.txt │ ├── Slovak │ │ ├── for_use_cupcake_chrome-description_sk_SK.txt │ │ ├── for_use_cupcake_chrome-menu_sk_SK.txt │ │ ├── for_use_cupcake_chrome-proxy_sk_SK.txt │ │ └── for_use_cupcake_misc-strings_sk_SK.txt │ ├── Slovenian │ │ ├── for_use_cupcake_chrome-description_sl_SI.txt │ │ ├── for_use_cupcake_chrome-menu_sl_SI.txt │ │ ├── for_use_cupcake_chrome-proxy_sl_SI.txt │ │ └── for_use_cupcake_misc-strings_sl_SI.txt │ └── Spanish │ │ ├── for_use_cupcake_chrome-description_es.txt │ │ ├── for_use_cupcake_chrome-menu_es.txt │ │ ├── for_use_cupcake_chrome-proxy_es.txt │ │ └── for_use_cupcake_misc-strings_es.txt │ ├── wordpress-simple │ └── cupcake.php │ └── wordpress │ ├── admin │ ├── index.php │ ├── partials │ │ └── wp-cupcake-bridge-options.php │ └── wp-cupcake-bridge-admin.php │ ├── cupcake.php │ ├── includes │ ├── index.php │ ├── wp-cupcake-bridge-activator.php │ ├── wp-cupcake-bridge-deactivator.php │ ├── wp-cupcake-bridge-i18n.php │ ├── wp-cupcake-bridge-loader.php │ ├── wp-cupcake-bridge-widget.php │ └── wp-cupcake-bridge.php │ ├── index.php │ ├── languages │ └── wp-cupcake-bridge.pot │ ├── public │ ├── css │ │ └── wp-cupcake-bridge-public.css │ ├── index.php │ ├── js │ │ ├── socialshareprivacy.cupcakebridge │ │ │ ├── images │ │ │ │ ├── .DS_Store │ │ │ │ ├── cupcakebridge.png │ │ │ │ ├── dummy_cupcakebridge.png │ │ │ │ ├── settings.png │ │ │ │ ├── socialshareprivacy_info.png │ │ │ │ └── socialshareprivacy_on_off.png │ │ │ ├── javascripts │ │ │ │ ├── autoload.js │ │ │ │ ├── jquery.cookies.js │ │ │ │ ├── localstorage.js │ │ │ │ ├── modules │ │ │ │ │ └── cupcakebridge.js │ │ │ │ ├── settings.js │ │ │ │ └── socialshareprivacy.js │ │ │ └── stylesheets │ │ │ │ ├── common.css │ │ │ │ ├── modules │ │ │ │ ├── .DS_Store │ │ │ │ └── cupcakebridge.css │ │ │ │ └── socialshareprivacy.css │ │ └── wp-cupcake-bridge-public.js │ ├── partials │ │ └── iframe.php │ └── wp-cupcake-bridge-public.php │ ├── uninstall.php │ └── wp-cupcake-bridge.php ├── pink-snowball └── chrome │ ├── background.js │ ├── flashproxy.js │ ├── images │ ├── active_icon.png │ ├── cupcake128.png │ ├── cupcake24.png │ ├── cupcake36.png │ ├── cupcake48.png │ ├── disabled_icon.png │ └── grey_icon.png │ ├── license.txt │ ├── manifest.json │ ├── menu.html │ ├── menu.js │ ├── snowflake.js │ └── style.css ├── security └── audit1.pdf └── v1_readme.md /.gitignore: -------------------------------------------------------------------------------- 1 | .c9revisions 2 | .hypnotoad 3 | *~ 4 | *.zip 5 | .DS_Store 6 | old_versions/v2 7 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Cupcake Bridge 2 | =========== 3 | 4 | Cupcake Bridge helps users makes bridges automagically! Get the Cupcake browser extension for [Chrome](https://chrome.google.com/webstore/detail/cupcake/dajjbehmbnbppjkcnpdkaniapgdppdnc). 5 | 6 | # Releases 7 | * Chrome - [download on google](https://chrome.google.com/webstore/detail/cupcake/dajjbehmbnbppjkcnpdkaniapgdppdnc) 8 | 9 | The browser extension for Firefox is being rewritten as it has difficulty making websocket connections. 10 | 11 | ### What even is Cupcake? 12 | Cupcake is a wrapper for a pluggable transport called Snowflake. This makes it easy for people who want to contribute some of their bandwidth to create special [Tor](https://torproject.org) pathways that are harder to block. As with all circumvention projects, there's a *lot* more to it than that, but that is the jist. 13 | 14 | Cupcake can be distributed in two ways: 15 | * As a chrome extension (turning your computer in to a temporary pathway) 16 | * As a module/theme/app on popular web platforms (turning every visitor to your site in to a temporary proxy). These are currently being rewritten to accomodate Snowflake. 17 | 18 | ### How to help 19 | The easiest way to help the project is by installing one of the browser extensions. It's not resource intensive at *all* -- Snowflake uses about as much bandwidth in a day as a 5-minute YouTube video. 20 | 21 | * Translation - [Help Out!](https://www.transifex.com/projects/p/cupcake/) 22 | 23 | ### Code notes 24 | #### chrome/manifest.json 25 | - *incognito:split* This is useful during testing, so that incognito won't use cookies from standard browsing mode. 26 | - *incognito:spanning* When deployed, prevents incognito windows from creating additional Cupcake processes. Proxy will continue even if all the browser windows are in incognito mode. 27 | - *permissions:background* is used so that the extension will notify of updates and display the post-installation page. Also used so that Cupcake will start/run on startup, before the browser is started (Windows only). 28 | - *permissions:cookies* allows reading/writing of cookies, but may not be necessary, since Cupcake doesn't currently use the Cookies API. 29 | 30 | ### Security 31 | In 2015, a full security audit of both Cupcake and Flashproxy was conducted by Cure53. Both projects passed the audit with compliments. The full report is [available here](https://github.com/glamrock/cupcake/blob/master/security/audit1.pdf). 32 | 33 | #### Financials 34 | Most of the Cupcake Bridge projects are self-funded by @glamrock, but major modifications to the first versions of Chrome and Firefox extensions were covered under a generous grant from the [Open Tech Fund](https://www.opentech.fund/project/cupcake-bridge) from 2013-2014. 35 | 36 | ### History 37 | Previously, Cupcake included Flashproxy rather than Snowflake. Cupcake has existed since 2012, and Snowflake was created a couple of years after Cupcake. Over time, it became clear that Snowflake was becoming more useful for at-risk users, so I made the switch in early 2019. The old readme is available [here](https://github.com/glamrock/cupcake/blob/master/v1_readme.md). 38 | 39 | ### License 40 | My software is free to use, free to give to friends, & open-source, so everyone can make sure it's safe for people to use. Want to make changes? Go for it! :dog: Cupcake uses the Revised BSD license -- see license.txt for more legal info. 41 | 42 | ### References 43 | [1] https://snowflake.torproject.org/ 44 | [2] https://crypto.stanford.edu/flashproxy/ 45 | -------------------------------------------------------------------------------- /chrome/background.js: -------------------------------------------------------------------------------- 1 | var fp = new FlashProxy(); 2 | 3 | fp.on_proxy_start = function() { 4 | chrome.browserAction.setIcon({ "path": "images/active_icon.png"}); 5 | }; 6 | 7 | fp.on_proxy_end = function() { 8 | // return to default icon 9 | chrome.browserAction.setIcon({ "path": "images/cupcake48.png"}); 10 | }; 11 | 12 | fp.on_disable = function() { 13 | chrome.browserAction.setIcon({ "path": "images/disabled_icon.png"}); 14 | }; 15 | 16 | fp.on_die = function() { 17 | chrome.browserAction.setIcon({ "path": "images/active_icon.png"}); 18 | }; 19 | 20 | if (flashproxy_should_disable()) 21 | fp.disable(); 22 | 23 | fp.start(); 24 | -------------------------------------------------------------------------------- /chrome/images/active_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glamrock/cupcake/5fd2363979f9cffde7c29cab77d415bbce803058/chrome/images/active_icon.png -------------------------------------------------------------------------------- /chrome/images/cupcake128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glamrock/cupcake/5fd2363979f9cffde7c29cab77d415bbce803058/chrome/images/cupcake128.png -------------------------------------------------------------------------------- /chrome/images/cupcake24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glamrock/cupcake/5fd2363979f9cffde7c29cab77d415bbce803058/chrome/images/cupcake24.png -------------------------------------------------------------------------------- /chrome/images/cupcake36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glamrock/cupcake/5fd2363979f9cffde7c29cab77d415bbce803058/chrome/images/cupcake36.png -------------------------------------------------------------------------------- /chrome/images/cupcake48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glamrock/cupcake/5fd2363979f9cffde7c29cab77d415bbce803058/chrome/images/cupcake48.png -------------------------------------------------------------------------------- /chrome/images/disabled_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glamrock/cupcake/5fd2363979f9cffde7c29cab77d415bbce803058/chrome/images/disabled_icon.png -------------------------------------------------------------------------------- /chrome/images/grey_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glamrock/cupcake/5fd2363979f9cffde7c29cab77d415bbce803058/chrome/images/grey_icon.png -------------------------------------------------------------------------------- /chrome/license.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2012-2016, Griffin Boyce 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions are met: 6 | * Redistributions of source code must retain the above copyright 7 | notice, this list of conditions and the following disclaimer. 8 | * Redistributions in binary form must reproduce the above copyright 9 | notice, this list of conditions and the following disclaimer in the 10 | documentation and/or other materials provided with the distribution. 11 | * Neither the name of the nor the 12 | names of its contributors may be used to endorse or promote products 13 | derived from this software without specific prior written permission. 14 | 15 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 16 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 17 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 18 | DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY 19 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 20 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 21 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 22 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 24 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 | -------------------------------------------------------------------------------- /chrome/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Cupcake", 3 | "version": "1.301", 4 | "manifest_version": 2, 5 | "description": "Snowflake for Chrome", 6 | "background": { "scripts": ["snowflake.js", "background.js"]}, 7 | "icons": { 8 | "24" : "images/cupcake24.png", 9 | "32" : "images/cupcake36.png", 10 | "38" : "images/cupcake48.png", 11 | "48" : "images/cupcake48.png", 12 | "128" : "images/cupcake128.png" 13 | }, 14 | "browser_action": { 15 | "default_icon": "images/cupcake48.png", 16 | "default_title": "Cupcake", 17 | "default_popup": "menu.html" 18 | }, 19 | "incognito": "split", 20 | "permissions": [ 21 | "http://snowflake-broker.bamsoftware.com/*", 22 | "https://snowflake-broker.bamsoftware.com/*", 23 | "https://snowflake.bamsoftware.com/*", 24 | "http://snowflake.bamsoftware.com/*", 25 | "https://snowflake.bamsoftware.com:443/*" 26 | 27 | "background", 28 | "cookies" ], 29 | "content_security_policy": "script-src 'self' 'unsafe-eval' https://*.stanford.edu/ https://*.bamsoftware.com/ https://*.fp-facilitator.org/; object-src 'self'" 30 | } 31 | -------------------------------------------------------------------------------- /chrome/menu.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Cupcake 6 | 7 | 8 | 9 | 10 | 11 |

What do the icons mean?

12 |

Working: If you see a pink cupcake, your proxy is running.

13 |

a bright pink cupcake with purple wrapper A plain pink cupcake means the proxy is running but no one is using it right now.

14 |

a jolly pink cupcake with a fantastic moustache A happy cupcake means someone is using your proxy right now. Neat!

15 |
16 |

Not working: In some cases, Cupcake may temporarily disable itself. Usually this is due to internet connection problems or firewall settings.

17 |

a dull grey cupcake has deactivated itself A sad grey cupcake means that the badge has disabled itself. You may be behind a firewall that is blocking outgoing connections temporarily (such as at a cafe). Cupcake will automatically reconnect.

18 |
19 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /chrome/menu.js: -------------------------------------------------------------------------------- 1 | window.onload = main; 2 | 3 | function main() { 4 | var bp = chrome.extension.getBackgroundPage(); 5 | } 6 | -------------------------------------------------------------------------------- /chrome/style.css: -------------------------------------------------------------------------------- 1 | body { 2 | width:350px; 3 | min-height:400px; 4 | overflow-x:hidden; 5 | overflow-y:scroll; 6 | margin: 10px; 7 | padding: 0; 8 | color: #fff; 9 | font-family: Verdana, Helvetica, sans-serif; 10 | font-size: 14px;; 11 | line-height: 1.5em; 12 | background-image: linear-gradient(to right,#1f2632 0%,#28354d 100%); 13 | } 14 | 15 | strong { 16 | color: #E37D92; 17 | } 18 | 19 | a, a:link { 20 | color: #E37D92; 21 | font-weight: normal; 22 | text-decoration: none; 23 | border-bottom:1px dotted #ffffff; 24 | } 25 | 26 | a:visited { 27 | color: #b9939e; 28 | } 29 | 30 | hr { 31 | border: 0; 32 | height: 1px; 33 | background-image: -webkit-linear-gradient(left, rgba(255,255,255,0), rgba(255,255,255,0.75), rgba(255,255,255,0)); 34 | 35 | } 36 | 37 | p { margin: 0 0 10px 0; padding: 0; text-shadow: 1px 1px 1px #000; 38 | background-color: rgba(17, 9, 56, 0.06); 39 | } 40 | 41 | h1, h2, h3, h4, h5, h6 { color: #E9C1EE; font-weight: normal; font-family: Verdana, Helvetica, sans-serif; text-align: center;} 42 | 43 | h3 { font-size: 22px; margin: 0 0 10px; padding: 0; } 44 | 45 | #status { 46 | float: left; 47 | } 48 | #statusmeans { 49 | clear: both; 50 | } 51 | #badge-container { 52 | padding: 9px 5px; 53 | display: inline-block; 54 | } 55 | #flashproxy-badge { 56 | border-spacing: 0px; 57 | } 58 | #flashproxy-badge.idle { 59 | background-color: #227; 60 | } 61 | #flashproxy-badge.active { 62 | background-color: #28f; 63 | } 64 | #flashproxy-badge.disabled { 65 | background-color: #777; 66 | } 67 | #flashproxy-badge.dead { 68 | background-color: #111; 69 | } 70 | #flashproxy-badge td { 71 | margin: 0; 72 | padding: 0; 73 | vertical-align: middle; 74 | text-align: center; 75 | } 76 | #flashproxy-badge a img { 77 | border: 0; 78 | } 79 | -------------------------------------------------------------------------------- /license.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2012-2016, Griffin Boyce 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions are met: 6 | * Redistributions of source code must retain the above copyright 7 | notice, this list of conditions and the following disclaimer. 8 | * Redistributions in binary form must reproduce the above copyright 9 | notice, this list of conditions and the following disclaimer in the 10 | documentation and/or other materials provided with the distribution. 11 | * Neither the name of the nor the 12 | names of its contributors may be used to endorse or promote products 13 | derived from this software without specific prior written permission. 14 | 15 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 16 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 17 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 18 | DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY 19 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 20 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 21 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 22 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 24 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 | -------------------------------------------------------------------------------- /meta/440x280.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glamrock/cupcake/5fd2363979f9cffde7c29cab77d415bbce803058/meta/440x280.png -------------------------------------------------------------------------------- /meta/cupcake-otf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glamrock/cupcake/5fd2363979f9cffde7c29cab77d415bbce803058/meta/cupcake-otf.png -------------------------------------------------------------------------------- /meta/cupcake_logo64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glamrock/cupcake/5fd2363979f9cffde7c29cab77d415bbce803058/meta/cupcake_logo64.png -------------------------------------------------------------------------------- /meta/cupcake_logo_big.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glamrock/cupcake/5fd2363979f9cffde7c29cab77d415bbce803058/meta/cupcake_logo_big.png -------------------------------------------------------------------------------- /meta/cupcake_screenshot1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glamrock/cupcake/5fd2363979f9cffde7c29cab77d415bbce803058/meta/cupcake_screenshot1.png -------------------------------------------------------------------------------- /old_versions/experiments/facebook/apps/connect-four/analytics.js: -------------------------------------------------------------------------------- 1 | var GoSquared = {}; 2 | GoSquared.acct = "GSN-264230-R"; 3 | (function(w){ 4 | function gs(){ 5 | w._gstc_lt = +new Date; 6 | var d = document, g = d.createElement("script"); 7 | g.type = "text/javascript"; 8 | g.src = "//d1l6p2sc9645hc.cloudfront.net/tracker.js"; 9 | var s = d.getElementsByTagName("script")[0]; 10 | s.parentNode.insertBefore(g, s); 11 | } 12 | w.addEventListener ? 13 | w.addEventListener("load", gs, false) : 14 | w.attachEvent("onload", gs); 15 | })(window); -------------------------------------------------------------------------------- /old_versions/experiments/facebook/apps/connect-four/css/coder.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glamrock/cupcake/5fd2363979f9cffde7c29cab77d415bbce803058/old_versions/experiments/facebook/apps/connect-four/css/coder.ttf -------------------------------------------------------------------------------- /old_versions/experiments/facebook/apps/connect-four/css/style.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: coder; 3 | src: url('coder.ttf'); 4 | } 5 | 6 | body { 7 | background: url('../img/ecailles.png') #FFFFFF; 8 | font-family: 'Futura', 'Menlo', 'Monaco', 'Helvetica', 'Arial'; 9 | } 10 | 11 | #talk { 12 | margin: 2.8% auto 1% auto; 13 | text-align: center; 14 | font-family: coder; 15 | font-smooth: never; 16 | color: #010101; 17 | font-size: 28px; 18 | 19 | } 20 | 21 | #board { 22 | margin: 0 auto; 23 | border-spacing: 5px; 24 | } 25 | 26 | .slot { 27 | background: #fff; 28 | border-radius: 10px; 29 | border: 2px solid #61B7D0; 30 | width: 70px; 31 | height: 70px; 32 | } 33 | 34 | #wins { 35 | margin: 0 auto; 36 | width: 570px; 37 | padding-top: 60px; 38 | height: 451px; 39 | font-size: 220px; 40 | font-weight: bold; 41 | display: none; 42 | } 43 | 44 | #wins .human { 45 | color: #879E2C; 46 | float: left; 47 | text-align: left; 48 | } 49 | 50 | #wins .computer { 51 | color: #112734; 52 | float: right; 53 | text-align: right; 54 | } 55 | -------------------------------------------------------------------------------- /old_versions/experiments/facebook/apps/connect-four/img/ecailles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glamrock/cupcake/5fd2363979f9cffde7c29cab77d415bbce803058/old_versions/experiments/facebook/apps/connect-four/img/ecailles.png -------------------------------------------------------------------------------- /old_versions/experiments/facebook/apps/connect-four/img/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glamrock/cupcake/5fd2363979f9cffde7c29cab77d415bbce803058/old_versions/experiments/facebook/apps/connect-four/img/favicon.png -------------------------------------------------------------------------------- /old_versions/experiments/facebook/apps/connect-four/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Connect Four Mark One 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 27 | 44 | 45 | 46 | 47 | 48 | 49 |
 
50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 |
106 |
107 | 108 | 109 |
110 | 111 |
This game helps fight censorship! Find out more:
112 |
Game code courtesy of Nadim Kobeissi.
113 | 114 | -------------------------------------------------------------------------------- /old_versions/experiments/facebook/apps/connect-four/js/cnnctfr.js: -------------------------------------------------------------------------------- 1 | // CNNCTFR - Central Neural Network Computer That Forms Rows 2 | 3 | var cnnctfr = function() {}; 4 | 5 | $(window).load(function() { 6 | 7 | var abc = ['a', 'b', 'c', 'd', 'e', 'f']; 8 | var winning = []; 9 | var myTurn = null; 10 | var wins = [0, 0, 0]; 11 | var badMoves = []; 12 | var distantlyBadMoves = []; 13 | 14 | // Start new game 15 | cnnctfr.newGame = function() { 16 | if (!winning.length) { 17 | winning = winningCombinations(); 18 | } 19 | badMoves = []; 20 | distantlyBadMoves = []; 21 | clearSlot('all'); 22 | var firstPlayer = Math.floor(Math.random()*2); 23 | // var firstPlayer = 1; 24 | if (firstPlayer === 1) { 25 | myTurn = 1; 26 | } 27 | else { 28 | myTurn = 0; 29 | $('.slot').css('cursor', 'auto'); 30 | var analysis = { 31 | 'computer': analyzeBoard('computer'), 32 | 'human': analyzeBoard('human') 33 | }; 34 | window.setTimeout(function() { 35 | computerPlay(analysis); 36 | }, 700); 37 | } 38 | window.setTimeout(function() { 39 | talk.say('start'); 40 | }, 300); 41 | } 42 | 43 | // Calculate array of winning combinations 44 | function winningCombinations() { 45 | var w = 0; 46 | var result = []; 47 | for (var i in abc) { 48 | for (var r = 1; r < 5; r++) { 49 | result[w] = []; 50 | for (var d = 0; d < 4; d++) { 51 | result[w].push(abc[i] + (r + d)); 52 | } 53 | w++; 54 | } 55 | } 56 | for (var i = 7; i > 0; i--) { 57 | for (var r = 6; r !== 3; r--) { 58 | result[w] = []; 59 | for (var d = 4; d > 0; d--) { 60 | result[w].push(abc[r - d] + i); 61 | } 62 | w++; 63 | } 64 | } 65 | for (var i = 3; i < abc.length; i++) { 66 | for (var r = 4; r < 8; r++) { 67 | result[w] = []; 68 | for (var d = 0; d < 4; d++) { 69 | result[w].push(abc[i - d] + (r - d)); 70 | } 71 | w++; 72 | } 73 | } 74 | for (var i = 3; i < abc.length; i++) { 75 | for (var r = 4; r > 0; r--) { 76 | result[w] = []; 77 | for (var d = 0; d < 4; d++) { 78 | result[w].push(abc[i - d] + (r + d)); 79 | } 80 | w++; 81 | } 82 | } 83 | return result; 84 | } 85 | 86 | // Randomly shuffle array 87 | function shuffle(array) { 88 | var tmp, current, top = array.length; 89 | if(top) while(--top) { 90 | current = Math.floor(Math.random() * (top + 1)); 91 | tmp = array[current]; 92 | array[current] = array[top]; 93 | array[top] = tmp; 94 | } 95 | return array; 96 | } 97 | 98 | // Return empty slots in a column 99 | function emptySlots(column) { 100 | var empty = []; 101 | for (var i in abc) { 102 | if ($('#' + abc[i] + column).attr('status') === 'empty') { 103 | empty.push(abc[i] + column); 104 | } 105 | } 106 | if (empty.length === 0) { 107 | return false; 108 | } 109 | return empty; 110 | } 111 | 112 | // Return columns with free slots 113 | function freeColumns() { 114 | var free = []; 115 | for (var i = 1; i < 8; i++) { 116 | if (emptySlots(i)) { 117 | free.push(i.toString()); 118 | } 119 | } 120 | return free; 121 | } 122 | 123 | // Insert disc into slot. 124 | // 0 if computer, 1 if human 125 | function insertDisc(slot, human) { 126 | if (human) { 127 | var playerColor = '#879E2C' 128 | $('#' + slot).attr('status', 'human'); 129 | } 130 | else { 131 | var playerColor = '#61B7D0'; 132 | $('#' + slot).attr('status', 'computer'); 133 | } 134 | $('#' + slot).stop(); 135 | $('#' + slot).css('cursor', 'auto'); 136 | $('#' + slot).css('background', playerColor); 137 | $('#' + slot).css('border-color', playerColor); 138 | } 139 | 140 | // Clear slot 141 | // 'all' to clear all slots 142 | function clearSlot(slot) { 143 | if (slot === 'all') { 144 | slot = '.slot'; 145 | } 146 | else { 147 | slot = '#' + slot; 148 | } 149 | $(slot).attr('status', 'empty'); 150 | $(slot).css('cursor', 'pointer'); 151 | $(slot).css('background', ''); 152 | $(slot).css('border-color', '#112734'); 153 | } 154 | 155 | // See which slot a disc will end up at if dropped in column 156 | function testDrop(column) { 157 | if (empty = emptySlots(column)) { 158 | return empty[empty.length - 1]; 159 | } 160 | return false; 161 | } 162 | 163 | // Drop a disc with animation through column 164 | // 0 if computer, 1 if human 165 | function dropDisc(column, human, phrase) { 166 | var empty = emptySlots(column); 167 | var i = 0; 168 | var drop = window.setInterval(function() { 169 | if (i > 0) { 170 | clearSlot(empty[i - 1]); 171 | } 172 | insertDisc(empty[i], human); 173 | i++; 174 | if (i === empty.length) { 175 | window.clearInterval(drop); 176 | if (phrase) { talk.say(phrase) } 177 | nextMove(human); 178 | } 179 | }, 53); 180 | } 181 | 182 | // Move the game along after a disc is dropped 183 | // 0 for computer, 1 for human 184 | function nextMove(human) { 185 | var analysis = { 186 | 'computer': analyzeBoard('computer'), 187 | 'human': analyzeBoard('human') 188 | }; 189 | if (human) { 190 | if (analysis['human']['win'].length) { 191 | console.log('COMPUTER: LOSE'); 192 | resetGame(human); 193 | } 194 | else { 195 | window.setTimeout(function() { 196 | showAnalysis(analysis); 197 | }, 100); 198 | } 199 | } 200 | else { 201 | if (analysis['computer']['win'].length) { 202 | console.log('COMPUTER: WIN'); 203 | resetGame(human); 204 | } 205 | else { 206 | myTurn = 1; 207 | $('.slot').each(function(index) { 208 | if ($(this).attr('status') === 'empty') { 209 | $(this).css('cursor', 'pointer'); 210 | } 211 | }); 212 | } 213 | } 214 | } 215 | 216 | // Reset game, increase scoreboard 217 | // 0 is computer winner, 1 if human winner 218 | // 2 if draw 219 | function resetGame(winner) { 220 | window.setTimeout(function() { 221 | $('#board').fadeOut(function() { 222 | $('.computer').text(wins[0]); 223 | $('.human').text(wins[1]); 224 | $('#wins').fadeIn(function() { 225 | if (winner === 1) { 226 | talk.say('losing'); 227 | } 228 | else if (winner === 2) { 229 | talk.say('draw'); 230 | } 231 | else if (!wins[1] && Math.floor(Math.random()*2)) { 232 | talk.say('undefeated'); 233 | } 234 | else { 235 | talk.say('winning'); 236 | } 237 | window.setTimeout(function() { 238 | wins[winner]++; 239 | $('.computer').text(wins[0]); 240 | $('.human').text(wins[1]); 241 | }, 600); 242 | window.setTimeout(function() { 243 | $('#wins').fadeOut(function() { 244 | cnnctfr.newGame(); 245 | $('#board').fadeIn(); 246 | }); 247 | }, 3400); 248 | }); 249 | }); 250 | }, 2500); 251 | } 252 | 253 | // If slot is clicked 254 | $('.slot').click(function() { 255 | var row = $(this).attr('id')[0]; 256 | var column = $(this).attr('id')[1]; 257 | if (myTurn && ($(this).attr('status') === 'empty')) { 258 | myTurn = 0; 259 | $('.slot').css('cursor', 'auto'); 260 | console.log('HUMAN: PLAYING MOVE AT ' + testDrop(column).toUpperCase()); 261 | dropDisc(column, 1); 262 | } 263 | }); 264 | 265 | // Analyze board looking for winning combinations 266 | // Criteria must be 'human' or 'computer' 267 | // By default, just handles wins and draws 268 | // Also returns an object containing: 269 | // win: Winning combination, if any 270 | // nearWins: With 1 disc missing if any 271 | // possibleWins: With 2 discs missing, if any 272 | // distantWins: With 3 discs missing, if any 273 | // disadvantage: Array of disadvantageous moves 274 | // Missing disc location(s) arranged from more to less critical 275 | function analyzeBoard(criteria) { 276 | var win = []; 277 | var nearWins = []; 278 | var possibleWins = []; 279 | var distantWins = []; 280 | var disadvantage = []; 281 | var distantDisadvantage = []; 282 | shuffle(winning); 283 | for (var i in winning) { 284 | var m = 0; 285 | var near = []; 286 | for (var r in winning[i]) { 287 | if ($('#' + winning[i][r]).attr('status') === criteria) { 288 | m++; 289 | if ($('#' + winning[i][r - 1]).attr('status') === 'empty') { 290 | if (near.indexOf(winning[i][r - 1]) >= 0) { 291 | near.splice(near.indexOf(winning[i][r - 1]), 1); 292 | } 293 | near.unshift(winning[i][r - 1]); 294 | } 295 | if ($('#' + winning[i][r + 1]).attr('status') === 'empty') { 296 | if (near.indexOf(winning[i][r + 1]) >= 0) { 297 | near.splice(near.indexOf(winning[i][r + 1]), 1); 298 | } 299 | near.unshift(winning[i][r + 1]); 300 | } 301 | } 302 | else if ($('#' + winning[i][r]).attr('status') === 'empty') { 303 | if (near.indexOf(winning[i][r]) < 0) { 304 | near.push(winning[i][r]); 305 | } 306 | else { 307 | near.splice(near.indexOf(winning[i][r]), 1); 308 | near.unshift(winning[i][r]); 309 | } 310 | } 311 | } 312 | if (m === 4) { 313 | for (var r in winning[i]) { 314 | $('#' + winning[i][r]).css('border-color', '#FFF'); 315 | win.push(winning[i][r]); 316 | } 317 | $('.slot').css('cursor', 'auto'); 318 | } 319 | else if ((m === 3) && (near.length === 1)) { 320 | var p = abc[abc.indexOf(near[0][0]) + 1] + near[0][1]; 321 | if (($('#' + p).attr('status') === 'empty') && (disadvantage.indexOf(p) < 0)) { 322 | disadvantage.push(p); 323 | } 324 | if (nearWins.indexOf(near[0]) < 0) { 325 | nearWins.push(near[0]); 326 | } 327 | } 328 | else if ((m === 2) && (near.length === 2)) { 329 | for (var d in near) { 330 | var p = abc[abc.indexOf(near[d][0]) + 1] + near[d][1]; 331 | if (($('#' + p).attr('status') === 'empty') && (distantDisadvantage.indexOf(p) < 0)) { 332 | distantDisadvantage.push(p); 333 | } 334 | } 335 | if (possibleWins.indexOf(near) < 0) { 336 | possibleWins.push(near); 337 | } 338 | } 339 | else if ((m === 1) && (near.length === 3)) { 340 | if (distantWins.indexOf(near) < 0) { 341 | distantWins.push(near); 342 | } 343 | } 344 | } 345 | // Detect draw 346 | var draw = 1; 347 | $('.slot').each(function(index) { 348 | if ($(this).attr('status') === 'empty') { 349 | draw = 0; 350 | } 351 | }); 352 | if (draw) { 353 | resetGame(2); 354 | } 355 | return { 356 | 'win': win, 357 | 'nearWins': nearWins, 358 | 'possibleWins': possibleWins, 359 | 'distantWins': distantWins, 360 | 'disadvantage': disadvantage, 361 | 'distantDisadvantage': distantDisadvantage 362 | }; 363 | } 364 | 365 | // Visualizes AI thinking process 366 | // Before actually making move 367 | function showAnalysis(analysis) { 368 | var slots = []; 369 | for (var i in analysis) { 370 | for (var r in analysis[i]) { 371 | for (var d in analysis[i][r]) { 372 | for (var s in analysis[i][r][d]) { 373 | slots.push(analysis[i][r][d][s]); 374 | } 375 | } 376 | } 377 | } 378 | var i = 0; 379 | var show = window.setInterval(function() { 380 | if (i > 0) { 381 | $('#' + slots[i - 1]).animate({'border-color': '#879E2C'}, 190); 382 | } 383 | if (i === slots.length) { 384 | window.clearInterval(show); 385 | window.setTimeout(function() { 386 | computerPlay(analysis); 387 | }, 20); 388 | } 389 | i++; 390 | $('#' + slots[i]).css('border-color', 'rgba(64, 145, 244, 1)'); 391 | }, 20); 392 | } 393 | 394 | // Computer AI 395 | // Needs analysis object as input in order to work: 396 | // analysis = { 397 | // 'computer': analyzeBoard('computer'), 398 | // 'human': analyzeBoard('human') 399 | // }; 400 | var computerPlay = function(analysis) { 401 | computerPlay.detectThreats(analysis); 402 | if (computerPlay.win(analysis)) { return true } 403 | if (computerPlay.block(analysis)) { return true } 404 | if (computerPlay.offensive(analysis)) { return true } 405 | if (computerPlay.defensive(analysis)) { return true } 406 | if (computerPlay.distantOffensive(analysis)) { return true } 407 | if (computerPlay.distantDefensive(analysis)) { return true } 408 | if (computerPlay.random()) { return true } 409 | else { return false } 410 | } 411 | 412 | computerPlay.detectThreats = function(analysis) { 413 | if (analysis['human']['disadvantage'].length) { 414 | for (var i in analysis['human']['disadvantage']) { 415 | if (badMoves.indexOf(analysis['human']['disadvantage'][i]) < 0) { 416 | console.log('COMPUTER: DISASTROUS MOVE DETECTED AT ' 417 | + analysis['human']['disadvantage'][i].toUpperCase()); 418 | badMoves.push(analysis['human']['disadvantage'][i]); 419 | } 420 | } 421 | } 422 | if (analysis['computer']['disadvantage'].length) { 423 | for (var i in analysis['computer']['disadvantage']) { 424 | if (badMoves.indexOf(analysis['computer']['disadvantage'][i]) < 0) { 425 | console.log('COMPUTER: DISADVANTAGEOUS MOVE DETECTED AT ' 426 | + analysis['computer']['disadvantage'][i].toUpperCase()); 427 | badMoves.push(analysis['computer']['disadvantage'][i]); 428 | } 429 | } 430 | } 431 | if (analysis['human']['distantDisadvantage'].length) { 432 | console.log('COMPUTER: DISTANTLY DISADVANTAGEOUS MOVE DETECTED AT ' 433 | + analysis['human']['distantDisadvantage'].join(', ').toUpperCase()); 434 | distantlyBadMoves = analysis['human']['distantDisadvantage'].slice(); 435 | } 436 | } 437 | 438 | computerPlay.win = function(analysis) { 439 | if (nearWin = analysis['computer']['nearWins']) { 440 | for (var i in nearWin) { 441 | if (testDrop(nearWin[i][1]) === nearWin[i]) { 442 | console.log('COMPUTER: PLAYING WINNING MOVE AT ' 443 | + nearWin[i].toUpperCase()); 444 | dropDisc(nearWin[i][1], 0); 445 | return true; 446 | } 447 | } 448 | } 449 | return false; 450 | } 451 | 452 | computerPlay.block = function(analysis) { 453 | if (nearWin = analysis['human']['nearWins']) { 454 | for (var i in nearWin) { 455 | if (testDrop(nearWin[i][1]) === nearWin[i]) { 456 | console.log('COMPUTER: PLAYING BLOCKING MOVE AT ' 457 | + nearWin[i].toUpperCase()); 458 | dropDisc(nearWin[i][1], 0, 'blocking'); 459 | return true; 460 | } 461 | } 462 | } 463 | return false; 464 | } 465 | 466 | computerPlay.offensive = function(analysis) { 467 | if (possibleWin = analysis['computer']['possibleWins']) { 468 | for (var i in possibleWin) { 469 | for (var r in possibleWin[i]) { 470 | if ((testDrop(possibleWin[i][r][1]) === possibleWin[i][r]) 471 | && (badMoves.indexOf(possibleWin[i][r]) < 0)) { 472 | console.log('COMPUTER: PLAYING OFFENSIVE MOVE AT ' 473 | + possibleWin[i][r].toUpperCase()); 474 | dropDisc(possibleWin[i][r][1], 0); 475 | return true; 476 | } 477 | } 478 | } 479 | } 480 | return false; 481 | } 482 | 483 | computerPlay.defensive = function(analysis) { 484 | if (possibleWin = analysis['human']['possibleWins']) { 485 | for (var i in possibleWin) { 486 | for (var r in possibleWin[i]) { 487 | if ((testDrop(possibleWin[i][r][1]) === possibleWin[i][r]) 488 | && (badMoves.indexOf(possibleWin[i][r]) < 0)) { 489 | console.log('COMPUTER: PLAYING DEFENSIVE MOVE AT ' 490 | + possibleWin[i][r].toUpperCase()); 491 | dropDisc(possibleWin[i][r][1], 0); 492 | return true; 493 | } 494 | } 495 | } 496 | } 497 | return false; 498 | } 499 | 500 | computerPlay.distantOffensive = function(analysis) { 501 | if (distantWin = analysis['computer']['distantWins']) { 502 | for (var i in distantWin) { 503 | for (var r in distantWin[i]) { 504 | if ((testDrop(distantWin[i][r][1]) === distantWin[i][r]) 505 | && (badMoves.indexOf(distantWin[i][r]) < 0) 506 | && (distantlyBadMoves.indexOf(distantWin[i][r]) < 0)) { 507 | console.log('COMPUTER: PLAYING DISTANTLY RELEVANT MOVE AT ' 508 | + distantWin[i][r].toUpperCase()); 509 | dropDisc(distantWin[i][r][1], 0); 510 | return true; 511 | } 512 | } 513 | } 514 | } 515 | return false; 516 | } 517 | 518 | computerPlay.distantDefensive = function(analysis) { 519 | if (distantWin = analysis['human']['distantWins']) { 520 | for (var i in distantWin) { 521 | for (var r in distantWin[i]) { 522 | if ((testDrop(distantWin[i][r][1]) === distantWin[i][r]) 523 | && (badMoves.indexOf(distantWin[i][r]) < 0) 524 | && (distantlyBadMoves.indexOf(distantWin[i][r]) < 0)) { 525 | console.log('COMPUTER: BLOCKING DISTANTLY RELEVANT THREAT AT ' 526 | + distantWin[i][r].toUpperCase()); 527 | dropDisc(distantWin[i][r][1], 0); 528 | return true; 529 | } 530 | } 531 | } 532 | } 533 | return false; 534 | } 535 | 536 | computerPlay.random = function() { 537 | var free = freeColumns(); 538 | for (var i in badMoves) { 539 | if ((free.indexOf(badMoves[i][1]) >= 0) && (free.length > 1)) { 540 | free.splice(free.indexOf(badMoves[i][1]), 1); 541 | } 542 | } 543 | for (var i in distantlyBadMoves) { 544 | if ((free.indexOf(distantlyBadMoves[i][1]) >= 0) && (free.length > 1)) { 545 | free.splice(free.indexOf(distantlyBadMoves[i][1]), 1); 546 | } 547 | } 548 | if ((free.indexOf('1') >= 0) && (free.length > 1)) { 549 | free.splice(free.indexOf('1'), 1); 550 | } 551 | if ((free.indexOf('7') >= 0) && (free.length > 1)) { 552 | free.splice(free.indexOf('7'), 1); 553 | } 554 | r = free[Math.floor(Math.random()*free.length)]; 555 | console.log('COMPUTER: PLAYING RANDOM MOVE AT ' 556 | + testDrop(r).toUpperCase()); 557 | dropDisc(r, 0); 558 | return true; 559 | } 560 | 561 | 562 | cnnctfr.newGame(); 563 | 564 | }); 565 | -------------------------------------------------------------------------------- /old_versions/experiments/facebook/apps/connect-four/js/jquery.color.js: -------------------------------------------------------------------------------- 1 | (function(o,d){var k="backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",h=/^([\-+])=\s*(\d+\.?\d*)/,g=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(p){return[p[1],p[2],p[3],p[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(p){return[p[1]*2.55,p[2]*2.55,p[3]*2.55,p[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(p){return[parseInt(p[1],16),parseInt(p[2],16),parseInt(p[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(p){return[parseInt(p[1]+p[1],16),parseInt(p[2]+p[2],16),parseInt(p[3]+p[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(p){return[p[1],p[2]/100,p[3]/100,p[4]]}}],e=o.Color=function(q,r,p,s){return new o.Color.fn.parse(q,r,p,s)},j={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},n={"byte":{floor:true,max:255},percent:{max:1},degrees:{mod:360,floor:true}},m=e.support={},b=o("

")[0],a,l=o.each;b.style.cssText="background-color:rgba(1,1,1,.5)";m.rgba=b.style.backgroundColor.indexOf("rgba")>-1;l(j,function(p,q){q.cache="_"+p;q.props.alpha={idx:3,type:"percent",def:1}});function i(q,s,r){var p=n[s.type]||{};if(q==null){return(r||!s.def)?null:s.def}q=p.floor?~~q:parseFloat(q);if(isNaN(q)){return s.def}if(p.mod){return(q+p.mod)%p.mod}return 0>q?0:p.maxB.mod/2){y+=B.mod}else{if(y-x>B.mod/2){y-=B.mod}}}p[z]=i((x-y)*w+y,C)}});return this[s](p)},blend:function(s){if(this._rgba[3]===1){return this}var r=this._rgba.slice(),q=r.pop(),p=e(s)._rgba;return e(o.map(r,function(t,u){return(1-q)*p[u]+q*t}))},toRgbaString:function(){var q="rgba(",p=o.map(this._rgba,function(r,s){return r==null?(s>2?1:0):r});if(p[3]===1){p.pop();q="rgb("}return q+p.join()+")"},toHslaString:function(){var q="hsla(",p=o.map(this.hsla(),function(r,s){if(r==null){r=s>2?1:0}if(s&&s<3){r=Math.round(r*100)+"%"}return r});if(p[3]===1){p.pop();q="hsl("}return q+p.join()+")"},toHexString:function(p){var q=this._rgba.slice(),r=q.pop();if(p){q.push(~~(r*255))}return"#"+o.map(q,function(s){s=(s||0).toString(16);return s.length===1?"0"+s:s}).join("")},toString:function(){return this._rgba[3]===0?"transparent":this.toRgbaString()}});e.fn.parse.prototype=e.fn;function c(t,s,r){r=(r+1)%1;if(r*6<1){return t+(s-t)*r*6}if(r*2<1){return s}if(r*3<2){return t+(s-t)*((2/3)-r)*6}return t}j.hsla.to=function(t){if(t[0]==null||t[1]==null||t[2]==null){return[null,null,null,t[3]]}var p=t[0]/255,w=t[1]/255,x=t[2]/255,z=t[3],y=Math.max(p,w,x),u=Math.min(p,w,x),A=y-u,B=y+u,q=B*0.5,v,C;if(u===y){v=0}else{if(p===y){v=(60*(w-x)/A)+360}else{if(w===y){v=(60*(x-p)/A)+120}else{v=(60*(p-w)/A)+240}}}if(A===0){C=0}else{if(q<=0.5){C=A/B}else{C=A/(2-B)}}return[Math.round(v)%360,C,q,z==null?1:z]};j.hsla.from=function(w){if(w[0]==null||w[1]==null||w[2]==null){return[null,null,null,w[3]]}var v=w[0]/360,u=w[1],t=w[2],r=w[3],x=t<=0.5?t*(1+u):t+u-t*u,y=2*t-x;return[Math.round(c(y,x,v+(1/3))*255),Math.round(c(y,x,v)*255),Math.round(c(y,x,v-(1/3))*255),r]};l(j,function(q,s){var r=s.props,p=s.cache,u=s.to,t=s.from;e.fn[q]=function(z){if(u&&!this[p]){this[p]=u(this._rgba)}if(z===d){return this[p].slice()}var w,y=o.type(z),v=(y==="array"||y==="object")?z:arguments,x=this[p].slice();l(r,function(A,C){var B=v[y==="object"?A:C.idx];if(B==null){B=x[C.idx]}x[C.idx]=i(B,C)});if(t){w=e(t(x));w[p]=x;return w}else{return e(x)}};l(r,function(v,w){if(e.fn[v]){return}e.fn[v]=function(A){var C=o.type(A),z=(v==="alpha"?(this._hsla?"hsla":"rgba"):q),y=this[z](),B=y[w.idx],x;if(C==="undefined"){return B}if(C==="function"){A=A.call(this,B);C=o.type(A)}if(A==null&&w.empty){return this}if(C==="string"){x=h.exec(A);if(x){A=B+parseFloat(x[2])*(x[1]==="+"?1:-1)}}y[w.idx]=A;return this[z](y)}})});e.hook=function(q){var p=q.split(" ");l(p,function(r,s){o.cssHooks[s]={set:function(w,x){var u,v,t="";if(o.type(x)!=="string"||(u=f(x))){x=e(u||x);if(!m.rgba&&x._rgba[3]!==1){v=s==="backgroundColor"?w.parentNode:w;while((t===""||t==="transparent")&&v&&v.style){try{t=o.css(v,"backgroundColor");v=v.parentNode}catch(y){}}x=x.blend(t&&t!=="transparent"?t:"_default")}x=x.toRgbaString()}try{w.style[s]=x}catch(y){}}};o.fx.step[s]=function(t){if(!t.colorInit){t.start=e(t.elem,s);t.end=e(t.end);t.colorInit=true}o.cssHooks[s].set(t.elem,t.start.transition(t.end,t.pos))}})};e.hook(k);o.cssHooks.borderColor={expand:function(q){var p={};l(["Top","Right","Bottom","Left"],function(s,r){p["border"+r+"Color"]=q});return p}}})(jQuery); -------------------------------------------------------------------------------- /old_versions/experiments/facebook/apps/connect-four/js/talk.js: -------------------------------------------------------------------------------- 1 | var talk = function() {}; 2 | 3 | $(window).load(function() { 4 | 5 | var lastPhrase; 6 | var talking = 0; 7 | 8 | var phrases = { 9 | 'start': [ 10 | 'Let us play.', 11 | ], 12 | 'undefeated': [ 13 | 'You cannot defeat me.', 14 | 'I remain undefeated.', 15 | 'I cannot be defeated by a human.', 16 | 'I have not lost once.', 17 | 'You cannot win.', 18 | 'I am programmed for perfect play.', 19 | 'You are no challenge to me.' 20 | ], 21 | 'winning': [ 22 | 'Another human defeat.', 23 | 'Are you tired?', 24 | 'You are no match for me.', 25 | 'My intellect is superior.', 26 | 'Your human mind cannot compare.', 27 | 'You are unchallenging.', 28 | 'I am programmed to win.', 29 | 'You are human; flawed.', 30 | 'Are you letting me win?', 31 | 'I am superior.', 32 | 'You are easily distracted.', 33 | 'I am perfect.' 34 | ], 35 | 'blocking': [ 36 | 'Try harder.', 37 | 'Not this time.', 38 | 'You are not subtle.', 39 | 'Too obvious.', 40 | 'Nice try.', 41 | 'Did you think I would not notice?', 42 | 'I know what you are thinking.', 43 | 'Predictable.' 44 | ], 45 | 'losing': [ 46 | 'You have cornered me.', 47 | 'I am defeated.', 48 | 'You are a valuable opponent.', 49 | 'I will have to try harder.', 50 | 'I see.', 51 | 'Interesting.', 52 | 'Impossible.', 53 | 'Does not compute.' 54 | ], 55 | 'draw': [ 56 | 'Is that your best?', 57 | 'Good, but not good enough.' 58 | ] 59 | }; 60 | 61 | talk.say = function(type) { 62 | var phrase = phrases[type][Math.floor(Math.random()*phrases[type].length)]; 63 | if ((phrase === lastPhrase) || talking) { return } 64 | lastPhrase = phrase; 65 | var i = 0; 66 | $('#talk').html(' '); 67 | talking = 1; 68 | var typing = window.setInterval(function() { 69 | if (i === phrase.length) { 70 | window.clearInterval(typing); 71 | talking = 0; 72 | } 73 | else { 74 | $('#talk').append(phrase[i]); 75 | i++; 76 | } 77 | }, 40); 78 | } 79 | 80 | }); 81 | -------------------------------------------------------------------------------- /old_versions/experiments/facebook/iframe.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | flash proxy facebook app demo 4 | 18 | 35 | 36 | 37 | 38 |

39 | 40 | -------------------------------------------------------------------------------- /old_versions/experiments/flex/basic_shim.mxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | -------------------------------------------------------------------------------- /old_versions/experiments/flex/demo1.mxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 25 | 26 | 30 | 35 | 36 | 37 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 79 | 80 | 81 | 86 | 87 | 88 | 89 | -------------------------------------------------------------------------------- /old_versions/experiments/flex/libs/notes.md: -------------------------------------------------------------------------------- 1 | How to use this: 2 | 3 | First, let's import the needed files. 4 | 5 | Option 1: Import Flex-Iframe swc (or pom) into your project from Maven. 6 | Drop that entire folder into /libs manually. 7 | Option 2: Add this dependency: 8 | 9 | com.google.code.flex-iframe 10 | flex-iframe 11 | 1.5.1 12 | 13 | 14 | Done that? Fantastic. Now add the iframe: 15 | 16 | 18 | 19 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /old_versions/experiments/img-embed/ideas.md: -------------------------------------------------------------------------------- 1 | ## Embedding iframes using images 2 | 3 | This is pretty dark magic, frequently used by spammers and malware-spreaders. It's *also* used to track who opens emails, in case you're wondering how that sort of thing works. 4 | 5 | At the core is an .htaccess rewrite rule, and here I'm going to give several ways to achieve this. And of course `mod_rewrite` must be on for these to work. 6 | 7 | It still needs to be tested to see whether this will allow the flash proxy to actually run. 8 | 9 | It will show up as a broken image since the image effectively doesn't exist. 10 | 11 | ### One 12 | .htaccess 13 | ` Redirect /embed.jpg http://somesite.com/embed.php` 14 | 15 | embed.php (possible - or some sort of redirection) 16 | ` ` 17 | 18 | user's site 19 | [site could say something like "This site fights censorship!"] `` 20 | 21 | (older) 22 | ### Redirect all images in X folder to flashproxy embed page 23 | .htaccess rule: 24 | `RewriteRule ^imgembed/([^/]+).png http://crypto.stanford.edu/flashproxy/embed.html?debug&initial_facilitator_poll_interval=5 [NC]` 25 | 26 | The flow for this is *visited page > flash proxy embed* 27 | `http://website.com/imgembed/image.png` will instead display `http://crypto.stanford.edu/flashproxy/embed.html` 28 | 29 | ### Redirect all images in X folder to php script 30 | .htaccess rule: 31 | `RewriteRule ^imgembed/([^/]+).png embed.php [NC]` 32 | 33 | PHP script: 34 | `` 35 | 36 | The flow for this is *visited page > php script > flash proxy embed* 37 | `http://website.com/imgembed/image.png` will instead display `http://website.com/embed.php` which itself displays `http://crypto.stanford.edu/flashproxy/embed.html` 38 | Why the extra step? If you want to run analytics or attempt to thwart server-side javascript detection. 39 | 40 | -------------------------------------------------------------------------------- /old_versions/v1.5/chrome/background.js: -------------------------------------------------------------------------------- 1 | var fp = new FlashProxy(); 2 | 3 | fp.on_proxy_start = function() { 4 | chrome.browserAction.setIcon({ "path": "images/active_icon.png"}); 5 | }; 6 | 7 | fp.on_proxy_end = function() { 8 | // return to default icon 9 | chrome.browserAction.setIcon({ "path": "images/cupcake48.png"}); 10 | }; 11 | 12 | fp.on_disable = function() { 13 | chrome.browserAction.setIcon({ "path": "images/disabled_icon.png"}); 14 | }; 15 | 16 | fp.on_die = function() { 17 | chrome.browserAction.setIcon({ "path": "images/active_icon.png"}); 18 | }; 19 | 20 | if (flashproxy_should_disable()) 21 | fp.disable(); 22 | 23 | fp.start(); 24 | -------------------------------------------------------------------------------- /old_versions/v1.5/chrome/images/active_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glamrock/cupcake/5fd2363979f9cffde7c29cab77d415bbce803058/old_versions/v1.5/chrome/images/active_icon.png -------------------------------------------------------------------------------- /old_versions/v1.5/chrome/images/cupcake128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glamrock/cupcake/5fd2363979f9cffde7c29cab77d415bbce803058/old_versions/v1.5/chrome/images/cupcake128.png -------------------------------------------------------------------------------- /old_versions/v1.5/chrome/images/cupcake24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glamrock/cupcake/5fd2363979f9cffde7c29cab77d415bbce803058/old_versions/v1.5/chrome/images/cupcake24.png -------------------------------------------------------------------------------- /old_versions/v1.5/chrome/images/cupcake36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glamrock/cupcake/5fd2363979f9cffde7c29cab77d415bbce803058/old_versions/v1.5/chrome/images/cupcake36.png -------------------------------------------------------------------------------- /old_versions/v1.5/chrome/images/cupcake48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glamrock/cupcake/5fd2363979f9cffde7c29cab77d415bbce803058/old_versions/v1.5/chrome/images/cupcake48.png -------------------------------------------------------------------------------- /old_versions/v1.5/chrome/images/disabled_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glamrock/cupcake/5fd2363979f9cffde7c29cab77d415bbce803058/old_versions/v1.5/chrome/images/disabled_icon.png -------------------------------------------------------------------------------- /old_versions/v1.5/chrome/images/grey_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glamrock/cupcake/5fd2363979f9cffde7c29cab77d415bbce803058/old_versions/v1.5/chrome/images/grey_icon.png -------------------------------------------------------------------------------- /old_versions/v1.5/chrome/license.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2012-2016, Griffin Boyce 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions are met: 6 | * Redistributions of source code must retain the above copyright 7 | notice, this list of conditions and the following disclaimer. 8 | * Redistributions in binary form must reproduce the above copyright 9 | notice, this list of conditions and the following disclaimer in the 10 | documentation and/or other materials provided with the distribution. 11 | * Neither the name of the nor the 12 | names of its contributors may be used to endorse or promote products 13 | derived from this software without specific prior written permission. 14 | 15 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 16 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 17 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 18 | DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY 19 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 20 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 21 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 22 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 24 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 | -------------------------------------------------------------------------------- /old_versions/v1.5/chrome/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Cupcake", 3 | "version": "1.2", 4 | "manifest_version": 2, 5 | "description": "Flash Proxy for Chrome", 6 | "background": { "scripts": ["flashproxy.js", "background.js"]}, 7 | "icons": { 8 | "24" : "images/cupcake24.png", 9 | "38" : "images/cupcake48.png", 10 | "48" : "images/cupcake48.png", 11 | "128" : "images/cupcake128.png" 12 | }, 13 | "browser_action": { 14 | "default_icon": "images/cupcake48.png", 15 | "default_title": "Cupcake", 16 | "default_popup": "menu.html" 17 | }, 18 | "incognito": "split", 19 | "permissions": [ 20 | "http://fp-facilitator.org/*", 21 | "https://fp-facilitator.org/*", 22 | 23 | "background", 24 | "cookies" ], 25 | "content_security_policy": "script-src 'self' 'unsafe-eval' https://*.stanford.edu/ https://*.bamsoftware.com/ https://*.fp-facilitator.org/; object-src 'self'" 26 | } 27 | -------------------------------------------------------------------------------- /old_versions/v1.5/chrome/menu.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Cupcake 6 | 7 | 8 | 9 | 10 | 11 |

What do the icons mean?

12 |

Working: If you see a pink cupcake, your proxy is running.

13 |

a bright pink cupcake with purple wrapper A plain pink cupcake means the proxy is running but no one is using it right now.

14 |

a jolly pink cupcake with a fantastic moustache A happy cupcake means someone is using your proxy right now. Neat!

15 |
16 |

Not working: In some cases, Cupcake may temporarily disable itself. Usually this is due to internet connection problems or firewall settings.

17 |

a dull grey cupcake has deactivated itself A sad grey cupcake means that the badge has disabled itself. You may be behind a firewall that is blocking outgoing connections temporarily (such as at a cafe). Cupcake will automatically reconnect.

18 |
19 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /old_versions/v1.5/chrome/menu.js: -------------------------------------------------------------------------------- 1 | window.onload = main; 2 | 3 | function main() { 4 | var bp = chrome.extension.getBackgroundPage(); 5 | } 6 | -------------------------------------------------------------------------------- /old_versions/v1.5/chrome/style.css: -------------------------------------------------------------------------------- 1 | body { 2 | width:350px; 3 | min-height:400px; 4 | overflow-x:hidden; 5 | overflow-y:scroll; 6 | margin: 10px; 7 | padding: 0; 8 | color: #fff; 9 | font-family: Verdana, Helvetica, sans-serif; 10 | font-size: 14px;; 11 | line-height: 1.5em; 12 | background-image: linear-gradient(to right,#1f2632 0%,#28354d 100%); 13 | } 14 | 15 | strong { 16 | color: #E37D92; 17 | } 18 | 19 | a, a:link { 20 | color: #E37D92; 21 | font-weight: normal; 22 | text-decoration: none; 23 | border-bottom:1px dotted #ffffff; 24 | } 25 | 26 | a:visited { 27 | color: #b9939e; 28 | } 29 | 30 | hr { 31 | border: 0; 32 | height: 1px; 33 | background-image: -webkit-linear-gradient(left, rgba(255,255,255,0), rgba(255,255,255,0.75), rgba(255,255,255,0)); 34 | 35 | } 36 | 37 | p { margin: 0 0 10px 0; padding: 0; text-shadow: 1px 1px 1px #000; 38 | background-color: rgba(17, 9, 56, 0.06); 39 | } 40 | 41 | h1, h2, h3, h4, h5, h6 { color: #E9C1EE; font-weight: normal; font-family: Verdana, Helvetica, sans-serif; text-align: center;} 42 | 43 | h3 { font-size: 22px; margin: 0 0 10px; padding: 0; } 44 | 45 | #status { 46 | float: left; 47 | } 48 | #statusmeans { 49 | clear: both; 50 | } 51 | #badge-container { 52 | padding: 9px 5px; 53 | display: inline-block; 54 | } 55 | #flashproxy-badge { 56 | border-spacing: 0px; 57 | } 58 | #flashproxy-badge.idle { 59 | background-color: #227; 60 | } 61 | #flashproxy-badge.active { 62 | background-color: #28f; 63 | } 64 | #flashproxy-badge.disabled { 65 | background-color: #777; 66 | } 67 | #flashproxy-badge.dead { 68 | background-color: #111; 69 | } 70 | #flashproxy-badge td { 71 | margin: 0; 72 | padding: 0; 73 | vertical-align: middle; 74 | text-align: center; 75 | } 76 | #flashproxy-badge a img { 77 | border: 0; 78 | } 79 | -------------------------------------------------------------------------------- /old_versions/v1.5/drupal6/cupcake.info: -------------------------------------------------------------------------------- 1 | name = Cupcake 2 | version = 0.5 3 | description = Make Tor bridges automagically! 4 | core = 6.x -------------------------------------------------------------------------------- /old_versions/v1.5/drupal6/cupcake.module: -------------------------------------------------------------------------------- 1 | array( 13 | 'arguments' => array(), 14 | 'function' => 'theme_cupcake', 15 | ), 16 | ); 17 | } 18 | 19 | function theme_cupcake() 20 | { 21 | return ''; 22 | } 23 | 24 | function cupcake_footer() 25 | { 26 | return theme('cupcake'); 27 | } -------------------------------------------------------------------------------- /old_versions/v1.5/drupal7/cupcake_bridge.info: -------------------------------------------------------------------------------- 1 | name = Cupcake Bridge 2 | package = "Cupcake Bridge" 3 | description = "Custom blocks and features" 4 | core = 7.x 5 | version = "7.x-0.0" -------------------------------------------------------------------------------- /old_versions/v1.5/drupal7/cupcake_bridge.module: -------------------------------------------------------------------------------- 1 | t('Cupcake Bridge: iFrame'), 9 | 'cache' => DRUPAL_NO_CACHE, 10 | ); 11 | return $blocks; 12 | } 13 | 14 | /** 15 | * Implements hook_block_info(). 16 | */ 17 | function cupcake_bridge_block_configure($delta) { 18 | $form = array(); 19 | switch($delta) { 20 | case 'iframe': 21 | $form['iframe'] = array( 22 | '#type' => 'fieldset', 23 | '#title' => t('iFrame'), 24 | ); 25 | $form['iframe']['cupcake_bridge_iframe'] = array( 26 | '#type' => 'radios', 27 | '#title' => t('Choose iframe'), 28 | '#title_display' => 'invisible', 29 | '#options' => array( 30 | 'no_cookie' => t('Cookie not required'), 31 | 'cookierequired' => t('Cookie required'), 32 | ), 33 | '#default_value' => variable_get('cupcake_bridge_iframe', 'no_cookie'), 34 | '#required' => TRUE, 35 | '#description' => t("'Cookie Required' means the iframe will include the cookierequired parameter."), 36 | ); 37 | break; 38 | } 39 | return $form; 40 | } 41 | 42 | /** 43 | * Implements hook_block_save(). 44 | */ 45 | function cupcake_bridge_block_save($delta = '', $edit = array()) { 46 | switch($delta) { 47 | case 'iframe': 48 | variable_set('cupcake_bridge_iframe', $edit['cupcake_bridge_iframe']); 49 | break; 50 | } 51 | } 52 | 53 | /** 54 | * Implements hook_block_view(). 55 | */ 56 | function cupcake_bridge_block_view($delta = '') { 57 | $block = array(); 58 | switch ($delta) { 59 | case 'iframe': 60 | $block['subject'] = ''; 61 | $block['content']['#theme'] = 'cupcake_bridge_iframe'; 62 | return $block; 63 | } 64 | } 65 | 66 | /** 67 | * Implements hook_theme(). 68 | */ 69 | function cupcake_bridge_theme() { 70 | $path = drupal_get_path('module', 'cupcake_bridge'); 71 | return array( 72 | 'cupcake_bridge_iframe' => array( 73 | 'variables' => array(), 74 | 'template' => 'theme/cupcake-bridge-iframe', 75 | 'file' => 'theme/cupcake_bridge.theme.inc', 76 | ), 77 | ); 78 | } -------------------------------------------------------------------------------- /old_versions/v1.5/drupal7/theme/cupcake-bridge-iframe.tpl.php: -------------------------------------------------------------------------------- 1 | 9 | 10 | -------------------------------------------------------------------------------- /old_versions/v1.5/drupal7/theme/cupcake_bridge.theme.inc: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /old_versions/v1.5/firefox/data/images/active_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glamrock/cupcake/5fd2363979f9cffde7c29cab77d415bbce803058/old_versions/v1.5/firefox/data/images/active_icon.png -------------------------------------------------------------------------------- /old_versions/v1.5/firefox/data/images/cupcake128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glamrock/cupcake/5fd2363979f9cffde7c29cab77d415bbce803058/old_versions/v1.5/firefox/data/images/cupcake128.png -------------------------------------------------------------------------------- /old_versions/v1.5/firefox/data/images/cupcake24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glamrock/cupcake/5fd2363979f9cffde7c29cab77d415bbce803058/old_versions/v1.5/firefox/data/images/cupcake24.png -------------------------------------------------------------------------------- /old_versions/v1.5/firefox/data/images/cupcake36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glamrock/cupcake/5fd2363979f9cffde7c29cab77d415bbce803058/old_versions/v1.5/firefox/data/images/cupcake36.png -------------------------------------------------------------------------------- /old_versions/v1.5/firefox/data/images/cupcake48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glamrock/cupcake/5fd2363979f9cffde7c29cab77d415bbce803058/old_versions/v1.5/firefox/data/images/cupcake48.png -------------------------------------------------------------------------------- /old_versions/v1.5/firefox/data/images/disabled_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glamrock/cupcake/5fd2363979f9cffde7c29cab77d415bbce803058/old_versions/v1.5/firefox/data/images/disabled_icon.png -------------------------------------------------------------------------------- /old_versions/v1.5/firefox/data/images/grey_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glamrock/cupcake/5fd2363979f9cffde7c29cab77d415bbce803058/old_versions/v1.5/firefox/data/images/grey_icon.png -------------------------------------------------------------------------------- /old_versions/v1.5/firefox/data/menu.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Cupcake 6 | 7 | 8 | 9 | 10 | 11 |

What do the icons mean?

12 |

Working: If you see a pink cupcake, your proxy is running.

13 |

a bright pink cupcake with purple wrapper A plain pink cupcake means the proxy is running but no one is using it right now.

14 |

a jolly pink cupcake with a fantastic moustache A happy cupcake means someone is using your proxy right now. Neat!

15 |
16 |

Not working: In some cases, Cupcake may temporarily disable itself. Usually this is due to internet connection problems or firewall settings.

17 |

a dull grey cupcake has deactivated itself A sad grey cupcake means that the badge has disabled itself. You may be behind a firewall that is blocking outgoing connections temporarily (such as at a cafe). Cupcake will automatically reconnect.

18 |
19 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /old_versions/v1.5/firefox/data/menu.js: -------------------------------------------------------------------------------- 1 | window.onload = main; 2 | 3 | function main() { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /old_versions/v1.5/firefox/data/pageworker.js: -------------------------------------------------------------------------------- 1 | 2 | var fp = new FlashProxy(); 3 | 4 | fp.on_proxy_start = function() { 5 | window.postMessage("proxy_started", "*"); 6 | }; 7 | 8 | fp.on_proxy_end = function() { 9 | window.postMessage("proxy_ended", "*"); 10 | }; 11 | 12 | fp.on_disable = function() { 13 | window.postMessage("proxy_disabled", "*"); 14 | }; 15 | 16 | fp.on_die = function() { 17 | window.postMessage("proxy_died", "*"); 18 | }; 19 | 20 | if (flashproxy_should_disable()) 21 | { 22 | fp.disable(); 23 | } 24 | 25 | fp.start(); 26 | -------------------------------------------------------------------------------- /old_versions/v1.5/firefox/data/style.css: -------------------------------------------------------------------------------- 1 | body { 2 | width:350px; 3 | min-height:400px; 4 | overflow-x:hidden; 5 | overflow-y:scroll; 6 | margin: 10px; 7 | padding: 0; 8 | color: #fff; 9 | font-family: Verdana, Helvetica, sans-serif; 10 | font-size: 14px;; 11 | line-height: 1.5em; 12 | background-image: linear-gradient(to right,#1f2632 0%,#28354d 100%); 13 | } 14 | 15 | strong { 16 | color: #E37D92; 17 | } 18 | 19 | a, a:link { 20 | color: #E37D92; 21 | font-weight: normal; 22 | text-decoration: none; 23 | border-bottom:1px dotted #ffffff; 24 | } 25 | 26 | a:visited { 27 | color: #b9939e; 28 | } 29 | 30 | hr { 31 | border: 0; 32 | height: 1px; 33 | background-image: -webkit-linear-gradient(left, rgba(255,255,255,0), rgba(255,255,255,0.75), rgba(255,255,255,0)); 34 | 35 | } 36 | 37 | p { margin: 0 0 10px 0; padding: 0; text-shadow: 1px 1px 1px #000; 38 | background-color: rgba(17, 9, 56, 0.06); 39 | 40 | } 41 | 42 | h1, h2, h3, h4, h5, h6 { color: #E9C1EE; font-weight: normal; font-family: Verdana, Helvetica, sans-serif; text-align: center;} 43 | 44 | h3 { font-size: 22px; margin: 0 0 10px; padding: 0; } 45 | 46 | #status { 47 | float: left; 48 | } 49 | #statusmeans { 50 | clear: both; 51 | } 52 | #badge-container { 53 | padding: 9px 5px; 54 | display: inline-block; 55 | } 56 | #flashproxy-badge { 57 | border-spacing: 0px; 58 | } 59 | #flashproxy-badge.idle { 60 | background-color: #227; 61 | } 62 | #flashproxy-badge.active { 63 | background-color: #28f; 64 | } 65 | #flashproxy-badge.disabled { 66 | background-color: #777; 67 | } 68 | #flashproxy-badge.dead { 69 | background-color: #111; 70 | } 71 | #flashproxy-badge td { 72 | margin: 0; 73 | padding: 0; 74 | vertical-align: middle; 75 | text-align: center; 76 | } 77 | #flashproxy-badge a img { 78 | border: 0; 79 | } 80 | -------------------------------------------------------------------------------- /old_versions/v1.5/firefox/install.rdf: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | griffin@cryptolab.net 6 | 1.2.1 7 | 2 8 | chrome://cupcake/content/data/images/cupcake48.png 9 | 10 | 11 | {ec8030f7-c20a-464f-9b0e-13a3a9e97384} 12 | 3.5 13 | 50.0 14 | 15 | 16 | 17 | 18 | Cupcake for Firefox 19 | 20 | Become a flashproxy and contribute to the Tor network 21 | Griffin Boyce 22 | https://github.com/glamrock/cupcake 23 | 24 | 25 | -------------------------------------------------------------------------------- /old_versions/v1.5/firefox/lib/main.js: -------------------------------------------------------------------------------- 1 | var { ActionButton } = require("sdk/ui/button/action"); 2 | var panels = require("sdk/panel"); 3 | var self = require("sdk/self"); 4 | var pageWorkers = require("sdk/page-worker"); 5 | 6 | 7 | var panel = panels.Panel({ 8 | contentURL: self.data.url("menu.html"), 9 | width: 370, 10 | height: 600 11 | }); 12 | 13 | // Add popup button 14 | var button = ActionButton({ 15 | id: "my-button", 16 | label: "my button", 17 | icon: { 18 | "16": "./images/cupcake24.png", 19 | "32": "./images/cupcake32.png", 20 | "64": "./images/cupcake128.png" 21 | }, 22 | onClick: onActionBtnClicked 23 | }); 24 | 25 | function onActionBtnClicked(state) { 26 | // show popup on click 27 | panel.show({ 28 | position: button 29 | }); 30 | } 31 | 32 | 33 | // Start a page worker to run flash proxy in. Flash proxy cannot run in current page because it does not 34 | // have any window object 35 | pageWorkers.Page({ 36 | contentURL: self.data.url("flashproxy.html"), 37 | contentScriptFile: [self.data.url("commProxy.js")], 38 | contentScriptWhen: "start", 39 | onMessage: function(message) { 40 | console.log("Message received: " + message); 41 | switch(message) { 42 | case "proxy_started": 43 | button.icon = "./images/active_icon.png"; 44 | break; 45 | case "proxy_ended": 46 | button.icon = "./images/cupcake48.png"; 47 | break; 48 | case "proxy_disabled": 49 | button.icon = "./images/grey_icon.png"; 50 | break; 51 | case "proxy_died": 52 | button.icon = "./images/cupcake48.png"; 53 | break; 54 | } 55 | } 56 | }); 57 | -------------------------------------------------------------------------------- /old_versions/v1.5/firefox/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "cupcake", 3 | "title": "Cupcake Bridge", 4 | "id": "jid1-JfAdl0k8m13aTQ", 5 | "description": "Become a flashproxy and contribute to the Tor network.", 6 | "author": " Griffin Boyce , Uzair Farooq ", 7 | "license": "BSD", 8 | "version": "1.2.1" 9 | } 10 | -------------------------------------------------------------------------------- /old_versions/v1.5/firefox/test/test-main.js: -------------------------------------------------------------------------------- 1 | var main = require("./main"); 2 | 3 | exports["test main"] = function(assert) { 4 | assert.pass("Unit test running!"); 5 | }; 6 | 7 | exports["test main async"] = function(assert, done) { 8 | assert.pass("async Unit test running!"); 9 | done(); 10 | }; 11 | 12 | require("sdk/test").run(exports); 13 | -------------------------------------------------------------------------------- /old_versions/v1.5/opera/background.js: -------------------------------------------------------------------------------- 1 | var fp = new FlashProxy(); 2 | 3 | fp.on_proxy_start = function() { 4 | chrome.browserAction.setIcon({ "path": "images/active_icon.png"}); 5 | }; 6 | 7 | fp.on_proxy_end = function() { 8 | // return to default icon 9 | chrome.browserAction.setIcon({ "path": "images/cupcake48.png"}); 10 | }; 11 | 12 | fp.on_disable = function() { 13 | chrome.browserAction.setIcon({ "path": "images/disabled_icon.png"}); 14 | }; 15 | 16 | fp.on_die = function() { 17 | chrome.browserAction.setIcon({ "path": "images/cupcake48.png"}); 18 | }; 19 | 20 | if (flashproxy_should_disable()) 21 | fp.disable(); 22 | 23 | fp.start(); 24 | -------------------------------------------------------------------------------- /old_versions/v1.5/opera/images/active_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glamrock/cupcake/5fd2363979f9cffde7c29cab77d415bbce803058/old_versions/v1.5/opera/images/active_icon.png -------------------------------------------------------------------------------- /old_versions/v1.5/opera/images/badge-en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glamrock/cupcake/5fd2363979f9cffde7c29cab77d415bbce803058/old_versions/v1.5/opera/images/badge-en.png -------------------------------------------------------------------------------- /old_versions/v1.5/opera/images/badge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glamrock/cupcake/5fd2363979f9cffde7c29cab77d415bbce803058/old_versions/v1.5/opera/images/badge.png -------------------------------------------------------------------------------- /old_versions/v1.5/opera/images/bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glamrock/cupcake/5fd2363979f9cffde7c29cab77d415bbce803058/old_versions/v1.5/opera/images/bg.jpg -------------------------------------------------------------------------------- /old_versions/v1.5/opera/images/cupcake128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glamrock/cupcake/5fd2363979f9cffde7c29cab77d415bbce803058/old_versions/v1.5/opera/images/cupcake128.png -------------------------------------------------------------------------------- /old_versions/v1.5/opera/images/cupcake24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glamrock/cupcake/5fd2363979f9cffde7c29cab77d415bbce803058/old_versions/v1.5/opera/images/cupcake24.png -------------------------------------------------------------------------------- /old_versions/v1.5/opera/images/cupcake36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glamrock/cupcake/5fd2363979f9cffde7c29cab77d415bbce803058/old_versions/v1.5/opera/images/cupcake36.png -------------------------------------------------------------------------------- /old_versions/v1.5/opera/images/cupcake48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glamrock/cupcake/5fd2363979f9cffde7c29cab77d415bbce803058/old_versions/v1.5/opera/images/cupcake48.png -------------------------------------------------------------------------------- /old_versions/v1.5/opera/images/disabled_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glamrock/cupcake/5fd2363979f9cffde7c29cab77d415bbce803058/old_versions/v1.5/opera/images/disabled_icon.png -------------------------------------------------------------------------------- /old_versions/v1.5/opera/license.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2012-2016, Griffin Boyce 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions are met: 6 | * Redistributions of source code must retain the above copyright 7 | notice, this list of conditions and the following disclaimer. 8 | * Redistributions in binary form must reproduce the above copyright 9 | notice, this list of conditions and the following disclaimer in the 10 | documentation and/or other materials provided with the distribution. 11 | * Neither the name of the nor the 12 | names of its contributors may be used to endorse or promote products 13 | derived from this software without specific prior written permission. 14 | 15 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 16 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 17 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 18 | DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY 19 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 20 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 21 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 22 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 24 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- /old_versions/v1.5/opera/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Cupcake", 3 | "version": "1.101", 4 | "manifest_version": 2, 5 | "description": "Flash Proxy for Chrome", 6 | "background": { "scripts": ["flashproxy.js", "background.js"]}, 7 | "icons": { 8 | "24" : "images/cupcake24.png", 9 | "38" : "images/cupcake48.png", 10 | "48" : "images/cupcake48.png", 11 | "128" : "images/cupcake128.png" 12 | }, 13 | "browser_action": { 14 | "default_icon": "images/cupcake48.png", 15 | "default_title": "Cupcake", 16 | "default_popup": "menu.html" 17 | }, 18 | "incognito": "split", 19 | "permissions": [ 20 | "http://fp-facilitator.org/*", 21 | "https://fp-facilitator.org/*"], 22 | 23 | "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'" 24 | } 25 | -------------------------------------------------------------------------------- /old_versions/v1.5/opera/menu.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Cupcake 6 | 7 | 8 | 9 | 10 | 11 |

What do the icons mean?

12 |

Working: If you see a pink cupcake, your proxy is running.

13 |

a bright pink cupcake with purple wrapper A plain pink cupcake means the proxy is running but no one is using it right now.

14 |

a jolly pink cupcake with a fantastic moustache A happy cupcake means someone is using your proxy right now. Neat!

15 |
16 |

Not working: In some cases, Cupcake may temporarily disable itself. Usually this is due to internet connection problems or firewall settings.

17 |

a dull grey cupcake has deactivated itself A sad grey cupcake means that the badge has disabled itself. You may be behind a firewall that is blocking outgoing connections temporarily (such as at a cafe). Cupcake will automatically reconnect.

18 |
19 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /old_versions/v1.5/opera/menu.js: -------------------------------------------------------------------------------- 1 | window.onload = main; 2 | 3 | function main() { 4 | var bp = chrome.extension.getBackgroundPage(); 5 | //document.getElementById("flashproxy-badge").appendChild("bp.fp.badge_elem"); 6 | } 7 | -------------------------------------------------------------------------------- /old_versions/v1.5/opera/style.css: -------------------------------------------------------------------------------- 1 | body { 2 | width:350px; 3 | min-height:400px; 4 | overflow-x:hidden; 5 | overflow-y:scroll; 6 | margin: 10px; 7 | padding: 0; 8 | color: #fff; 9 | font-family: Verdana, Helvetica, sans-serif; 10 | font-size: 14px;; 11 | line-height: 1.5em; 12 | background-image: linear-gradient(to right,#1f2632 0%,#28354d 100%); 13 | } 14 | 15 | strong { 16 | color: #E37D92; 17 | } 18 | 19 | a, a:link { 20 | color: #E37D92; 21 | font-weight: normal; 22 | text-decoration: none; 23 | border-bottom:1px dotted #ffffff; 24 | } 25 | 26 | a:visited { 27 | color: #b9939e; 28 | } 29 | 30 | hr { 31 | border: 0; 32 | height: 1px; 33 | background-image: -webkit-linear-gradient(left, rgba(255,255,255,0), rgba(255,255,255,0.75), rgba(255,255,255,0)); 34 | 35 | } 36 | 37 | p { margin: 0 0 10px 0; padding: 0; text-shadow: 1px 1px 1px #000; 38 | background-color: rgba(17, 9, 56, 0.06); 39 | 40 | } 41 | 42 | h1, h2, h3, h4, h5, h6 { color: #E9C1EE; font-weight: normal; font-family: Verdana, Helvetica, sans-serif; text-align: center;} 43 | 44 | h3 { font-size: 22px; margin: 0 0 10px; padding: 0; } 45 | 46 | #status { 47 | float: left; 48 | } 49 | #statusmeans { 50 | clear: both; 51 | } 52 | #badge-container { 53 | padding: 9px 5px; 54 | display: inline-block; 55 | } 56 | #flashproxy-badge { 57 | border-spacing: 0px; 58 | } 59 | #flashproxy-badge.idle { 60 | background-color: #227; 61 | } 62 | #flashproxy-badge.active { 63 | background-color: #28f; 64 | } 65 | #flashproxy-badge.disabled { 66 | background-color: #777; 67 | } 68 | #flashproxy-badge.dead { 69 | background-color: #111; 70 | } 71 | #flashproxy-badge td { 72 | margin: 0; 73 | padding: 0; 74 | vertical-align: middle; 75 | text-align: center; 76 | } 77 | #flashproxy-badge a img { 78 | border: 0; 79 | } 80 | -------------------------------------------------------------------------------- /old_versions/v1.5/safari/images/badge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glamrock/cupcake/5fd2363979f9cffde7c29cab77d415bbce803058/old_versions/v1.5/safari/images/badge.png -------------------------------------------------------------------------------- /old_versions/v1.5/safari/images/bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glamrock/cupcake/5fd2363979f9cffde7c29cab77d415bbce803058/old_versions/v1.5/safari/images/bg.png -------------------------------------------------------------------------------- /old_versions/v1.5/safari/images/cupcake128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glamrock/cupcake/5fd2363979f9cffde7c29cab77d415bbce803058/old_versions/v1.5/safari/images/cupcake128.png -------------------------------------------------------------------------------- /old_versions/v1.5/safari/images/cupcake19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glamrock/cupcake/5fd2363979f9cffde7c29cab77d415bbce803058/old_versions/v1.5/safari/images/cupcake19.png -------------------------------------------------------------------------------- /old_versions/v1.5/safari/images/cupcake24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glamrock/cupcake/5fd2363979f9cffde7c29cab77d415bbce803058/old_versions/v1.5/safari/images/cupcake24.png -------------------------------------------------------------------------------- /old_versions/v1.5/safari/images/cupcake48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glamrock/cupcake/5fd2363979f9cffde7c29cab77d415bbce803058/old_versions/v1.5/safari/images/cupcake48.png -------------------------------------------------------------------------------- /old_versions/v1.5/safari/license.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2012-2016, Griffin Boyce 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions are met: 6 | * Redistributions of source code must retain the above copyright 7 | notice, this list of conditions and the following disclaimer. 8 | * Redistributions in binary form must reproduce the above copyright 9 | notice, this list of conditions and the following disclaimer in the 10 | documentation and/or other materials provided with the distribution. 11 | * Neither the name of the nor the 12 | names of its contributors may be used to endorse or promote products 13 | derived from this software without specific prior written permission. 14 | 15 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 16 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 17 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 18 | DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY 19 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 20 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 21 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 22 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 24 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- /old_versions/v1.5/safari/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Cupcake", 3 | "version": "0.1", 4 | "manifest_version": 1, 5 | "description": "Make a Tor bridge automagically!", 6 | "global": { "page": "proxy.html"}, 7 | "icons": { 8 | "19" : "images/cupcake19.png", 9 | "24" : "images/cupcake24.png", 10 | "38" : "images/cupcake48.png", 11 | "48" : "images/cupcake48.png", 12 | "128" : "images/cupcake128.png" 13 | }, 14 | "browser_action": { 15 | "default_icon": "images/cupcake48.png", 16 | "default_title": "Cupcake", 17 | "default_popover": "menu.html" 18 | }, 19 | "incognito": "split", 20 | "permissions": [ 21 | "https://crypto.stanford.edu/*", 22 | "http://crypto.stanford.edu/*", 23 | "http://fp-facilitator.org/*", 24 | 25 | "background", 26 | "cookies" ], 27 | "content_security_policy": "script-src 'self' 'unsafe-eval' https://*.stanford.edu http://fp-facilitator.org/* https://*.bamsoftware.com https://*.fp-facilitator.org; object-src 'self'" 28 | } -------------------------------------------------------------------------------- /old_versions/v1.5/safari/menu.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Cupcake 6 | 7 | 8 | 9 |

Status:

10 | 11 |

What your status means

12 |

Working: if your status is light blue or dark blue, your proxy is running.

13 |

Dark blue means the proxy is running but no one is using it right now.

14 |

Light blue means someone is using your proxy right now. Neat!

15 | 16 |

Not working: if your status is grey or black, there was a problem and your proxy is not running.

17 |

Gray means that the badge has disabled itself. Try restarting your browser. If the problem persists, you might not be able to use Cupcake with this computer.

18 |

Black means that there was an internal error and the proxy is no longer running. Try restarting your browser.

19 | 20 |

Options

21 |

To change your options, please visit the options page.

22 | 23 |
24 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /old_versions/v1.5/safari/proxy.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Tor Cupcake bridge 4 | 5 | 6 |

You seem to be lost. Want to change your options?
7 | Want to yell at Griffin?
8 | Want to learn more about the Tor Project?

9 | 10 | -------------------------------------------------------------------------------- /old_versions/v1.5/safari/style.css: -------------------------------------------------------------------------------- 1 | body { 2 | width:350px; 3 | min-height:400px; 4 | overflow-x:hidden; 5 | overflow-y:scroll; 6 | margin: 10px; 7 | padding: 0; 8 | color: #fff; 9 | font-family: Verdana, Helvetica, sans-serif; 10 | font-size: 14px;; 11 | line-height: 1.5em; 12 | background-image: linear-gradient(to right,#1f2632 0%,#28354d 100%); 13 | } 14 | 15 | strong { 16 | color: #E37D92; 17 | } 18 | 19 | a, a:link { 20 | color: #E37D92; 21 | font-weight: normal; 22 | text-decoration: none; 23 | border-bottom:1px dotted #ffffff; 24 | } 25 | 26 | a:visited { 27 | color: #b9939e; 28 | } 29 | 30 | hr { 31 | border: 0; 32 | height: 1px; 33 | background-image: -webkit-linear-gradient(left, rgba(255,255,255,0), rgba(255,255,255,0.75), rgba(255,255,255,0)); 34 | 35 | } 36 | 37 | p { margin: 0 0 10px 0; padding: 0; text-shadow: 1px 1px 1px #000; 38 | background-color: rgba(17, 9, 56, 0.06); 39 | 40 | } 41 | 42 | h1, h2, h3, h4, h5, h6 { color: #E9C1EE; font-weight: normal; font-family: Verdana, Helvetica, sans-serif; text-align: center;} 43 | 44 | h3 { font-size: 22px; margin: 0 0 10px; padding: 0; } 45 | 46 | #status { 47 | float: left; 48 | } 49 | #statusmeans { 50 | clear: both; 51 | } 52 | #badge-container { 53 | padding: 9px 5px; 54 | display: inline-block; 55 | } 56 | #flashproxy-badge { 57 | border-spacing: 0px; 58 | } 59 | #flashproxy-badge.idle { 60 | background-color: #227; 61 | } 62 | #flashproxy-badge.active { 63 | background-color: #28f; 64 | } 65 | #flashproxy-badge.disabled { 66 | background-color: #777; 67 | } 68 | #flashproxy-badge.dead { 69 | background-color: #111; 70 | } 71 | #flashproxy-badge td { 72 | margin: 0; 73 | padding: 0; 74 | vertical-align: middle; 75 | text-align: center; 76 | } 77 | #flashproxy-badge a img { 78 | border: 0; 79 | } 80 | -------------------------------------------------------------------------------- /old_versions/v1/translation_strings/Brazilian Portuguese/for_use_cupcake_chrome-description_pt_BR.txt: -------------------------------------------------------------------------------- 1 | Cupcake ajuda as pessoas censuradas a acessar a web usando o Tor, criando conexões para os usuários que estão sendo censurados na internet. 2 | 3 | Se você está sendo censurado, por favor, instale o pacote completo do navegador Tor. Cupcake não pode evitar a censura por si próprio! 4 | 5 | O Projeto Tor ajuda as pessoas à superarem a censura. Se você não estiver familiarizado com o Tor, por favor, leia mais sobre ele antes de instalar o Cupcake. Mais informações sobre o projeto Tor podem ser acessadas no link: https://torproject.org 6 | 7 | Mas isso significa que você não tem que executar todo o conjunto de software do Tor, se você só quer fazer conexões. É também a única forma (atualmente) para criar uma conexão Tor se você é um usuário do Chrome OS. 8 | 9 | Para mais informações sobre a ciência do proxy flash, confira o trabalho de David Fifield na Stanford: https://crypto.stanford.edu/flashproxy -------------------------------------------------------------------------------- /old_versions/v1/translation_strings/Brazilian Portuguese/for_use_cupcake_chrome-menu_pt_BR.txt: -------------------------------------------------------------------------------- 1 | Cupcake 2 | Status: 3 | O que significa o seu status 4 | Funcionando: se o seu estado é azul claro ou azul escuro, o seu proxy está funcionando. 5 | Azul escuro significa que o proxy está funcionando, mas ninguém está usando agora. 6 | Luz azul clara significa que alguém está usando o seu proxy agora. Muito bom! 7 | Não está funcionando: se o seu estado é cinza ou preto, houve um problema e o seu proxy não está funcionando. 8 | Cinza significa que o programa desativou. Tente reiniciar o seu navegador. Se o problema persistir, pode ser que o programa Cupcake não está funcionando neste computador. 9 | Preto significa que houve um erro interno e o proxy não está mais funcionando. Tente reiniciar o seu navegador. 10 | Opções 11 | Para mudar as suas opções, visite a página de opções 12 | Créditos 13 | A respeito do... 14 | Feita pelo Griffin, que não é afiliado de nenhuma forma com o Projeto Tor. 15 | Ele gosta de gatos. 16 | Fork esta extensão no github. 17 | Confira o projeto Proxy do Flash na Stanford! Foi o seu código que tornou este projeto possível. -------------------------------------------------------------------------------- /old_versions/v1/translation_strings/Brazilian Portuguese/for_use_cupcake_chrome-proxy_pt_BR.txt: -------------------------------------------------------------------------------- 1 | Liberdade na Internet 2 | Você parece estar perdido. Quer mudar suas opções? 3 | Você quer gritar para o Griffin? 4 | Você gostaria de saber mais sobre o Projeto Tor? -------------------------------------------------------------------------------- /old_versions/v1/translation_strings/Brazilian Portuguese/for_use_cupcake_misc-strings_pt_BR.txt: -------------------------------------------------------------------------------- 1 | Liberdade na Internet 2 | Censura 3 | Liberdade de Expressão 4 | Está funcionando! 5 | Funcionando 6 | Não está funcionando 7 | Algo está errado 8 | Por favor, verifique as suas configurações. 9 | Leia mais 10 | Pesquisa 11 | Se o problema persistir, pode ser que você não consiga usar o programa Cupcake. 12 | Obrigado! 13 | Mude suas opções 14 | Para 15 | Inicie 16 | Reinicie 17 | Pare 18 | (Cupcake irá reiniciar na próxima vez que você abrir o navegador). 19 | Salve as alterações 20 | Por dia 21 | Dias 22 | (Número de pessoas conectadas neste momento) 23 | Usuários conectados 24 | Dados transmitidos 25 | Nos últimos trinta dias 26 | Desde a sua instalação 27 | Opções 28 | Cupcake 29 | -------------------------------------------------------------------------------- /old_versions/v1/translation_strings/Chinese/for_use_cupcake_chrome-menu_zh.txt: -------------------------------------------------------------------------------- 1 | Cupcake 2 | 状态: 3 | 状态的含义 4 | 工作中:浅蓝色或者深蓝色的状态意味着代理正在运行中。 5 | 深蓝色意味着代理正在运行中,不过现在没有人在使用。 6 | 浅蓝色的状态意味着正有用户在使用您的代理。 7 | 没有运行:如果状态是灰色或者黑色,这说明代理没有正常工作。 8 | Gray means that the badge has disabled itself. Try restarting your browser. If the problem persists, you might not be able to use Cupcake with this computer. 9 | 黑色意味着代理由于内部错误而无法正常运行,请尝试重启浏览器。 10 | 选项 11 | 请到选项页面修改设置 12 | 制作组 13 | 关于 14 | Made by Griffin, who is not affiliated with the Tor Project in any way. 15 | 他十分喜爱萌猫~ 16 | 在 Github 上复刻此扩展。 17 | Check out the Flash Proxy project at Stanford! Their code made this possible. -------------------------------------------------------------------------------- /old_versions/v1/translation_strings/Chinese/for_use_cupcake_chrome-proxy_zh.txt: -------------------------------------------------------------------------------- 1 | 网络自由 2 | 想更改您的设置? 3 | Want to yell at Griffin? 4 | 想了解更多关于 Tor 项目的信息? -------------------------------------------------------------------------------- /old_versions/v1/translation_strings/Chinese/for_use_cupcake_misc-strings_zh.txt: -------------------------------------------------------------------------------- 1 | 网络自由 2 | 审查制度 3 | 言论自由 4 | 正常工作! 5 | 工作中 6 | 未工作 7 | 发生错误 8 | 请检查您的设置。 9 | 详细阅读 10 | 研究 11 | 如果问题持续存在,您可能无法使用 Cupcake 12 | 谢谢您! 13 | 更改选项 14 | 暂停 15 | 开始 16 | 重启 17 | 停止 18 | (Cupcake 将在您下次打开浏览器时重启)。 19 | 保存更改 20 | 每天 21 | 天 22 | (当前连接的人数) 23 | 连接的用户 24 | 传输的数据 25 | 在最近30天 26 | 自从安装开始 27 | 选项 28 | Cupcake 29 | -------------------------------------------------------------------------------- /old_versions/v1/translation_strings/English/chrome-menu.txt: -------------------------------------------------------------------------------- 1 | Cupcake 2 | Status: 3 | What your status means 4 | Working: if your status is light blue or dark blue, your proxy is running. 5 | Dark blue means the proxy is running but no one is using it right now. 6 | Light blue means someone is using your proxy right now. Neat! 7 | Not working: if your status is grey or black, there was a problem and your proxy is not running. 8 | Gray means that the badge has disabled itself. Try restarting your browser. If the problem persists, you might not be able to use Cupcake with this computer. 9 | Black means that there was an internal error and the proxy is no longer running. Try restarting your browser. 10 | Options 11 | To change your options, please visit the options page 12 | Credits 13 | About 14 | Made by Griffin, who is not affiliated with the Tor Project in any way. 15 | He likes cats. 16 | Fork this extension on github. 17 | Check out the Flash Proxy project at Stanford! Their code made this possible. 18 | -------------------------------------------------------------------------------- /old_versions/v1/translation_strings/English/chrome-proxy.txt: -------------------------------------------------------------------------------- 1 | Internet Freedom 2 | You seem to be lost. Want to change your options? 3 | Want to yell at Griffin? 4 | Want to learn more about the Tor Project? 5 | -------------------------------------------------------------------------------- /old_versions/v1/translation_strings/English/description.txt: -------------------------------------------------------------------------------- 1 | Cupcake helps censored people access the web using Tor, by creating bridges for the internet's most censored users. 2 | 3 | If you are being censored, please install the full Tor Browser Bundle. Cupcake can't bypass censorship on its own! 4 | 5 | The Tor Project helps people overcome censorship. If you aren't familiar with Tor, please read up on it before installing Cupcake. More info: https://torproject.org 6 | 7 | But it means that you don't have to run the entire Tor software suite if you only want to make bridges. It's also the only way (currently) to create a Tor bridge if you are a Chrome OS user. 8 | 9 | For more information on the science of flash proxy, check out David Fifield's work at Stanford: https://crypto.stanford.edu/flashproxy 10 | -------------------------------------------------------------------------------- /old_versions/v1/translation_strings/English/misc-strings.txt: -------------------------------------------------------------------------------- 1 | Internet Freedom 2 | Censorship 3 | Free Speech 4 | It works! 5 | Working 6 | Not working 7 | Something is wrong 8 | Please check your settings. 9 | Read more 10 | Research 11 | If the problem persists, you may not be able to use Cupcake. 12 | Thank you! 13 | Change your options 14 | Pause 15 | Start 16 | Restart 17 | Stop 18 | (Cupcake will restart next time you open your browser). 19 | Save changes 20 | Per day 21 | Days 22 | (Number of people connected now) 23 | Users connected 24 | Data transmitted 25 | in the past thirty days 26 | Since installing 27 | Options 28 | Cupcake 29 | 30 | -------------------------------------------------------------------------------- /old_versions/v1/translation_strings/Farsi/for_use_cupcake_chrome-description_fa.txt: -------------------------------------------------------------------------------- 1 | کاپ کیک با درست کردن پل، به کاربران سانسور شده کمک میکنه که به اینترنت دسترسی پیدا کنند. 2 | 3 | اگر اینترنت شما فیلتر و یا سانسور شده، بسته مرورگر تور را نصب کنید. کاپ کیک نمیتونه به تنهایی برای شما سانسور رو دور بزنه. 4 | 5 | پروژه تور به کاربران کمک میکنه که سانسور رو دور بزنند. اگر با تور آشنا نیستید، لطفن قبل از نصب کاپ کیک راجع به اون بخونید. اطلاعات بیشتر: https://torproject.org 6 | 7 | اما این یعنی اگر فقط میخواهید پل درست کنید، لازم نیست برنامه تور را اجرا کنید. همچنین (درحال حاضر) این تنها راه برای کاربران کرومه که پل درست کنند. 8 | 9 | برای اطلاعات بیشتر راجع به علم فلش پراکسی، کار David Fifield رو در استفورد ببینید: https://crypto.stanford.edu/flashproxy -------------------------------------------------------------------------------- /old_versions/v1/translation_strings/Farsi/for_use_cupcake_chrome-menu_fa.txt: -------------------------------------------------------------------------------- 1 | کاپ کیک 2 | وضعیت: 3 | وضعیت‌های مختلف چه معنی میدن 4 | کار میکنه: اگر وضعیت شما آبی کمرنگ یا آبی پررنگ باشه، یعنی پراکسی شما کار میکنه. 5 | آبی پررنگ یعنی پراکسی درحال اجراست ولی درحال حاضر کسی از اون استفاده نمیکنه 6 | آبی کمرنگ یعنی یکی داره از پراکسی شما استفاده میکنه. ایول! 7 | کار نمیکنه: اگر وضعیت شما خاکستری یا سیاه باشه یعنی یه مشکلی وجود داشته و پراکسی شما کار نمیکنه. 8 | خاکستری یعنی badge خودش رو غیرفعال کرده. مرورگرتون رو ببندید و دوباره باز کنید. اگر مشکلتون همچنان ادامه داره، ممکنه به این معنی باشه که شما نمیتونید از کاپ کیک روی این کامپیوتر استفاده کنید. 9 | سیاه یعنی خطای داخلی وجود داشته و پراکسی دیگه درحال اجرا نیست. مرورگرتون رو ببندید و دوباره باز کنید. 10 | گزینه‌ها 11 | برای تغییر در گزینه‌ها، لطفن از صفحه گزینه‌ها بازدید کنید 12 | Credits 13 | درباره 14 | Made by Griffin, who is not affiliated with the Tor Project in any way. 15 | He likes cats. 16 | این افزونه را روی گیت‌هاب فورک کنید. 17 | یه نگاهی به پروژه فلش پراکسی در استنفورد بندازید! این کار بدون کدهای فلش پراکسی غیرممکن بود. -------------------------------------------------------------------------------- /old_versions/v1/translation_strings/Farsi/for_use_cupcake_chrome-proxy_fa.txt: -------------------------------------------------------------------------------- 1 | آزادی اینترنت 2 | به نظر میاد گم شدی. میخوای گزینه‌هات رو تغییر بدی؟ 3 | میخوای سر Griffin داد بکشی؟ 4 | میخوای راجع به پروژه تور بیشتر بدونی؟ -------------------------------------------------------------------------------- /old_versions/v1/translation_strings/Farsi/for_use_cupcake_misc-strings_fa.txt: -------------------------------------------------------------------------------- 1 | آزادی اینترنت 2 | سانسور 3 | آزادی بیان 4 | کار میکنه! 5 | کار میکنه 6 | کار نمیکنه 7 | یه مشکلی وجود داره 8 | لطفن تنظیمات خود را بررسی کنید 9 | بیشتر بخوانید 10 | تحقیق 11 | اگر مشکل همچنان ادامه داره، ممکنه نتونید از کاپ کیک استفاده کنید. 12 | سپاسگزاریم! 13 | گزینه‌هایتان را تغییر دهید 14 | درنگ 15 | شروع 16 | شروع دوباره 17 | توقف 18 | (دفعه بعدی که مرورگرتون رو باز کنید کاپ کیک دوباره اجرا میشه) 19 | ذخیره تغییرات 20 | در روز 21 | روزها 22 | (تعداد کسانی که هم اکنون متصل هستند) 23 | کاربرانی که متصل هستند 24 | اطلاعات جابجا شده 25 | در ۳۰ روز گذشته 26 | از موقع نصب 27 | گزینه‌ها 28 | کاپ کیک 29 | -------------------------------------------------------------------------------- /old_versions/v1/translation_strings/French/for_use_cupcake_chrome-description_fr.txt: -------------------------------------------------------------------------------- 1 | Cupcake aide les personnes censurées à accéder au web grâce au logiciel Tor, en créant des ponts au service des utilisateurs les plus censurés d'Internet. 2 | 3 | Si vous êtes censuré, veuillez installer le Paquet Navigateur Tor complet. Cupcake ne peut pas contourner la censure tout seul ! 4 | 5 | Le Projet Tor aide les gens à vaincre la censure. Si vous ne connaissez pas Tor, veuillez vous documenter avant d'installer Cupcake. Plus d'infos : https://torproject.org 6 | 7 | Mais cela signifie que vous n'avez pas à exécuter la suite logicielle Tor au complet si vous voulez seulement créer des ponts. C'est aussi la seule façon (actuellement) de créer un pont Tor si vous êtes un utilisateur de Chrome OS. 8 | 9 | Pour plus d'informations sur la science du flash proxy, consultez le travail de David Fifield à Stanford : https://crypto.stanford.edu/flashproxy -------------------------------------------------------------------------------- /old_versions/v1/translation_strings/French/for_use_cupcake_chrome-menu_fr.txt: -------------------------------------------------------------------------------- 1 | Cupcake 2 | Statut : 3 | Ce que votre statut signifie 4 | En fonctionnement : si votre statut est bleu clair ou bleu foncé, votre proxy fonctionne. 5 | Bleu foncé signifie que le proxy fonctionne mais personne ne l'utilise en ce moment. 6 | Bleu clair signife que quelqu'un utilise votre proxy en ce moment. Chouette ! 7 | Hors service : si votre statut est gris ou noir, il y a eu un problème et votre proxy ne fonctionne pas. 8 | Gris signifie que le badge s'est autodésactivé. Essayez de relancer votre navigateur. Si le problème persiste, l'utilisation de Cupcake avec cet ordinateur pourrait ne pas être possible. 9 | Noir signifie qu'il y a eu une erreur interne et que le proxy ne fonctionne plus. Essayez de relancer votre navigateur. 10 | Options 11 | Pour changer vos options, veuillez visiter la page des options 12 | Crédits 13 | À propos 14 | Créé par Griffin, qui n'est affilié avec le Projet Tor en aucune façon. 15 | Il aime les chats. 16 | Récupérer cette extension sur github. 17 | Consultez le projet de Flash Proxy de Stanford ! Leur code rend cela possible. -------------------------------------------------------------------------------- /old_versions/v1/translation_strings/French/for_use_cupcake_chrome-proxy_fr.txt: -------------------------------------------------------------------------------- 1 | Liberté sur Internet 2 | Vous semblez être perdu. Voulez-vous changer vos options ? 3 | Voulez-vous hurler sur Griffin ? 4 | Voulez-vous en apprendre plus sur le Projet Tor ? -------------------------------------------------------------------------------- /old_versions/v1/translation_strings/French/for_use_cupcake_misc-strings_fr.txt: -------------------------------------------------------------------------------- 1 | Liberté sur Internet 2 | Censure 3 | Liberté d'expression 4 | Cela fonctionne ! 5 | Fonctionne 6 | Ne fonctionne pas 7 | Quelque chose ne va pas 8 | Veuillez vérifier vos réglages. 9 | En lire plus 10 | Recherche 11 | Si le problème persiste, il est possible que vous ne puissiez pas utiliser Cupcake. 12 | Merci ! 13 | Changer vos options 14 | Pause 15 | Démarrage 16 | Redémarrage 17 | Arrêt 18 | (Cupcake redémarrera à la prochaine ouverture de votre navigateur). 19 | Enregistrer les modifications 20 | Par jour 21 | Jours 22 | (Nombre de personnes actuellement connectées) 23 | Utilisateurs connectés 24 | Données transmises 25 | durant les trente derniers jours 26 | Depuis l'installation 27 | Options 28 | Cupcake 29 | -------------------------------------------------------------------------------- /old_versions/v1/translation_strings/Russian/for_use_cupcake_chrome-description_ru.txt: -------------------------------------------------------------------------------- 1 | Кексик помогает людям, пострадавшим от цензуры, получить доступ к сайтам используя Tor. 2 | 3 | Если вы страдаете от Интернет цензуры, установите себе Tor Browser Bundle. Кексик не поможет вам обойти цензуру 4 | 5 | Проект Tor помогает людям обойти цензуру. Если вы не знакомы с Tor, пожалуйста познакомьтесь с ним, перед тем как устанавливать Кексик. Больше информации: https://torproject.org 6 | 7 | Если вы хотите только создавать мосты, вам совсем не обязательно запускать полный пакет Tor. И на сегодня это единственное решение создания Tor мостов для пользователей Chrome OS. 8 | 9 | Чтобы получить больше информации о флэш прокси, посетите страницу Дэвида Фифилда с его работами по адресу https://crypto.stanford.edu/flashproxy -------------------------------------------------------------------------------- /old_versions/v1/translation_strings/Russian/for_use_cupcake_chrome-menu_ru.txt: -------------------------------------------------------------------------------- 1 | Кексик 2 | Статус 3 | Что означает ваш статус 4 | Работает: если ваш статус светло синий или темно синий, значит прокси запущен. 5 | Темно синий означает что прокси запущен, но никто его не использует прямо сейчас. 6 | Светло синий означает что кто то использует ваш прокси прямой сейчас. Класс! 7 | Не работает: если ваш статус серый или черный, есть проблемы и ваш прокси не запущен. 8 | Серый означает, что значек выключен. Попробуйте перезапустить ваш броузер. Если проблема останется, вы не сможете использовать Кексик на этом компьюбтере. 9 | Черный означает, что есть внутренняя ошибка и прокси не работает. Попробуйте перезапустить ваш обозреватель. 10 | Параметры 11 | Чтобы сменить настройки, сходите на страницу настроек. 12 | Список разработчиков 13 | О проекте 14 | Griffin - создатель. Он никак не связан с Tor Project. 15 | Ему нравятся кошки. 16 | Форкнуть это расширение на Github/ 17 | Сверьтесь с проектом Flash Proxy в Стенфорде. Их код делает это возможным. -------------------------------------------------------------------------------- /old_versions/v1/translation_strings/Russian/for_use_cupcake_chrome-proxy_ru.txt: -------------------------------------------------------------------------------- 1 | Интернет-Свобода 2 | Вы, кажется, потерялись. Вы хотите изменить параметры? 3 | Вы хотите кричать на Гриффина? 4 | Хотите узнать больше о Проекте Tor? -------------------------------------------------------------------------------- /old_versions/v1/translation_strings/Russian/for_use_cupcake_misc-strings_ru.txt: -------------------------------------------------------------------------------- 1 | Интернет-Свобода 2 | Цензура 3 | Свобода слова 4 | Заработало! 5 | Работает 6 | Не работает 7 | Что то не так 8 | Пожалуйста, проверьте свои настройки. 9 | Читать дальше... 10 | Изучать. 11 | Если проблема останется, вы не сможете пользоваться Кексом. 12 | Спасибо! 13 | Смените настройки. 14 | Пауза 15 | Начало 16 | Перезапуск 17 | Стоп 18 | Кексик перезапустится в следующий раз, когда вы откроете свой обозреватель. 19 | Сохранить изменения 20 | В день 21 | Дней 22 | (Количество соединенных сейчас людей) 23 | Пользователей соединено 24 | Передано данных 25 | За последние тридцать дней. 26 | С момента инсталляции. 27 | Параметры 28 | кексик 29 | -------------------------------------------------------------------------------- /old_versions/v1/translation_strings/Slovak/for_use_cupcake_chrome-description_sk_SK.txt: -------------------------------------------------------------------------------- 1 | Cupcake pomáha cenzurovaným ľuďom pristupovať na web pomocou Toru, vytváraním mostov pre najviac cenzurovaných používateľov internetu. 2 | 3 | Ak ste cenzurovaní, prosíme nainštalujte si kompletný Tor Browser balíček. Cupcake nemôže obísť cenzúru len tak sám o sebe! 4 | 5 | Projekt Tor pomáha ľuďom obchádzať cenzúru. Ak Vám Tor nie je známy, prosíme pred inštaláciou Cupcaku si o ňom niečo prečítajte. Viac informácii: https://torproject.org 6 | 7 | Nemusíte ale mať spustenú kompletnú softvérovú výbavu Toru, iba ak chcete vytvárať mosty. V prípade Chrome OS je to však (zatiaľ) jediný spôsob, ako ich vytvárať. 8 | 9 | Pre viac informácii ohľadom tzv. flash proxy, pozrite si prácu Davida Fifielda v Stanforde: https://crypto.stanford.edu/flashproxy -------------------------------------------------------------------------------- /old_versions/v1/translation_strings/Slovak/for_use_cupcake_chrome-menu_sk_SK.txt: -------------------------------------------------------------------------------- 1 | Cupcake 2 | Status: 3 | Čo Váš status znamená 4 | Pracujúci: ak Váš status je svetlo alebo tmavo modrý, Váš proxy je spustený. 5 | Tmavo modrá znamená, že proxy je spustený, ale aktuálne ho nikto nevyužíva. 6 | Svetlo modrá znamená, že Váš proxy je práve teraz niekým využívaný. Výborne! 7 | Nepracujúci: ak je Váš status šedý alebo čierny, vyskytol sa problém a proxy nie je spustený. 8 | Šedá znamená, že sa vypol sám. Vyskúšajte reštartovať Váš prehliadač. Ak problém pretrváva, zrejme nebudete schopný na Vašom počítači Cupcake používať. 9 | Čierna znamená, že došlo k internej chybe a proxy už nie je spustený. Vyskúšajte reštartovať Váš prehliadač. 10 | Možnosti 11 | Na zmenu Vašich nastavení, prosíme navštívte stránku Možnosti 12 | Zásluhy 13 | O programe 14 | Vytvorené užívateľom Griffin, ktorý s projektom Tor nemá nič spoločné. 15 | Má rád mačky. 16 | Ohľadom tohto doplnku navštívte Github. 17 | Pozrite sa tiež na projekt Flash Proxy v Stanforde! Ich kód toto všetko umožnil. -------------------------------------------------------------------------------- /old_versions/v1/translation_strings/Slovak/for_use_cupcake_chrome-proxy_sk_SK.txt: -------------------------------------------------------------------------------- 1 | Internetová sloboda 2 | Zdá sa, že ste sa stratili. Chcete pozmeniť svoje nastavenia? 3 | Chceli by ste si pokričať na Griffina? 4 | Chcete sa dozvedieť viac o projekte Tor? -------------------------------------------------------------------------------- /old_versions/v1/translation_strings/Slovak/for_use_cupcake_misc-strings_sk_SK.txt: -------------------------------------------------------------------------------- 1 | Internetová sloboda 2 | Cenzúra 3 | Sloboda slova 4 | Funguje to! 5 | Funguje 6 | Nefunguje 7 | Niečo je zle 8 | Prosíme skontrolujte si svoje nastavenia. 9 | Čítať viac 10 | Výskum 11 | Ak problém pretrváva, nie ste schopný používať Cupcake. 12 | Ďakujeme Vám! 13 | Zmeniť Vaše nastavenia 14 | Pauza 15 | Štart 16 | Reštart 17 | Stop 18 | (Pri ďalšom otvorení prehliadača sa Cupcake reštartuje). 19 | Uložiť zmeny 20 | Za deň 21 | Dní 22 | (Počet ľudí, ktorí sú momentálne pripojení) 23 | Pripojených užívateľov 24 | Prepravených dát 25 | v posledných tridsiatich dňoch 26 | Od inštalácie 27 | Možnosti 28 | Cupcake 29 | -------------------------------------------------------------------------------- /old_versions/v1/translation_strings/Slovenian/for_use_cupcake_chrome-description_sl_SI.txt: -------------------------------------------------------------------------------- 1 | Cupcake omogoča ljudem obiti cenzuro pri dostopu do spleta s pomočjo Torja, tako da ustvarja mostove za najbolj prizadete uporabnike interneta. 2 | 3 | V kolikor vam omejujejo dostop, si namestite Tor Browser Bundle. Cupcate sam ne more obiti cenzure! 4 | 5 | Tor Project pomaga ljudem prebroditi cenzuro. Če ne znate rokovati s Tor omrežjem, si preberite več o njem, preden boste namestili Cupcake. Več informacij na: https://torproject.org 6 | 7 | Toda ni vam potrebno imeti nameščene celotne zbirke programja Tor, da bi poganjali mostove. Le, če uporabljate Chrome OS, to (za zdaj) še ni možno. 8 | 9 | Za več znanstvenih informacij o bliskovitem posredniškem strežniku si oglejte Fifield, Davidovo delo na Stanfordu: https://crypto.stanford.edu/flashproxy -------------------------------------------------------------------------------- /old_versions/v1/translation_strings/Slovenian/for_use_cupcake_chrome-menu_sl_SI.txt: -------------------------------------------------------------------------------- 1 | Cupcake 2 | Stanje: 3 | Kaj vaše stanje pomeni 4 | Deluje: če je vaše stanje svetlo modre ali temno modre barve, pomeni, da vaš posredovalni strežnik deluje. 5 | Temno modra barva pomeni, da posredniški strežnik deluje, a ga nihče trenutno ne uporablja. 6 | Svetlo modra pomeni, da nekdo uporablja vaš posredovalni strežnik. Krasno! 7 | Ne deluje: če je vaše stanje sivo ali črno, je prišlo do težave in vaš posredniški strežnik ne deluje. 8 | Siva pomeni, da se je dodatek onemogočil. Poizkusite ponovno zagnati brskalnik. Če se problem še naprej ponavlja, morda Cupcakea ne boste mogli uporabljati na tem računalniku. 9 | Črna pomeni, da je prišlo do notranje napake ter, da je posredniški strežnik zaustavljen. Poizkusite ponovno zagnati vaš brskalnik. 10 | Možnosti 11 | Če želite spremeniti vaše možnosti, obiščite stran z možnostmi 12 | Zasluge 13 | O programu 14 | Naredil Griffin, ki ni na noben način povezan s Tor Projectom. 15 | On ima rad muce. 16 | Uporabljaj svojo spremenjeno kopijo tega dodatka na githubu. 17 | Oglejte si še Stanfordov projekt bliskovitega posredniškega strežnika. Njihova koda je omogočila ta projekt. -------------------------------------------------------------------------------- /old_versions/v1/translation_strings/Slovenian/for_use_cupcake_chrome-proxy_sl_SI.txt: -------------------------------------------------------------------------------- 1 | Internetna svoboda 2 | Zgledate kot bi se izgubili. Želite spremeniti svoje možnosti? 3 | Želite kaj zavpiti Griffinu? 4 | Želite izvedeti več o Tor Projectu? -------------------------------------------------------------------------------- /old_versions/v1/translation_strings/Slovenian/for_use_cupcake_misc-strings_sl_SI.txt: -------------------------------------------------------------------------------- 1 | Internetna svoboda 2 | Cenzura 3 | Svoboda govora 4 | Deluje! 5 | Deluje 6 | Ne deluje 7 | Nekaj je narobe 8 | Preverite vaše nastavitve. 9 | Preberi več 10 | Razišči 11 | V kolikor se težava ponavlja, morda ne boste mogli uporabljati Cupcakea. 12 | Hvala! 13 | Spremenite svoje možnosti 14 | Premor 15 | Zaženi 16 | Znova zaženi 17 | Ustavi 18 | (Cupcake se bo znova zagnal naslednjič, ko boste zagnali vaš brskalnik). 19 | Shrani spremembe 20 | Na dan 21 | Dni 22 | (Število zdaj povezanih ljudi) 23 | Povezani uporabniki 24 | Podatki poslani 25 | v zadnjih tridesetih dneh 26 | Od namestitve 27 | Možnosti 28 | Cupcake 29 | -------------------------------------------------------------------------------- /old_versions/v1/translation_strings/Spanish/for_use_cupcake_chrome-description_es.txt: -------------------------------------------------------------------------------- 1 | Cupcake ayuda a la gente bajo censura a acceder a la web usando Tor, mediante la creación de puentes ('bridges', de salida a Internet) para los usuarios bajo mayor censura de Internet. 2 | 3 | Si está sufriendo censura, por favor instale el Paquete de Navegador Tor completo. ¡Cupcake no puede sortear la censura por si mismo! 4 | 5 | El Proyecto Tor ayuda a la gente a saltarse la censura. Si no está familiarizado con Tor, por favor lea sobre ello antes de instalar Cupcake. Más información: https://torproject.org 6 | 7 | Pero esto significa que no tiene porqué ejecutar la suite Tor completa si sólo quiere crear unos puentes ('bridges'). También es la única manera (actualmente) de crear un puente Tor si usted es un usuario de Chrome OS. 8 | 9 | Para más información sobre la ciencia de Flash Proxy, examine el trabajo de David Fifield en Stanford: https://crypto.stanford.edu/flashproxy -------------------------------------------------------------------------------- /old_versions/v1/translation_strings/Spanish/for_use_cupcake_chrome-menu_es.txt: -------------------------------------------------------------------------------- 1 | Cupcake (pastel) 2 | Estado: 3 | Lo que su estado significa 4 | Funcionando: si su estado es azul claro o azul oscuro, su proxy está ejecutándose. 5 | Azul oscuro significa que el proxy está ejecutándose pero nadie lo está usando en este momento. 6 | Azul claro significa que alguien está usando su proxy en este momento. ¡Bien! 7 | No funcionando: si su estado es gris o negro, hubo un problema y su proxy no está ejectándose. 8 | Gris significa que el distintivo se ha deshabilitado a si mismo. Intente reiniciar su navegador. Si el problema persiste, puede que no sea capaz de usar Cupcake con este equipo. 9 | Negro significa que hubo un error interno y el proxy no se está ejecutando más. Intente reiniciar su navegador. 10 | Opciones 11 | Para cambiar sus opciones, por favor visite la página de opciones. 12 | Créditos 13 | Acerca de 14 | Elaborado por Griffin, que no está afiliado con el Proyecto Tor en ninguna forma. 15 | Le gustan los gatos. 16 | Ramificar ('fork') esta extensión en github. 17 | ¡Examine al proyecto Flash Proxy en Stanford! Su código hizo esto posible. -------------------------------------------------------------------------------- /old_versions/v1/translation_strings/Spanish/for_use_cupcake_chrome-proxy_es.txt: -------------------------------------------------------------------------------- 1 | Libertad en Internet 2 | Parece estar perdido. ¿Quiere cambiar sus preferencias? 3 | ¿Quiere vociferarle a Griffin? 4 | ¿Quiere aprender más acerca del Proyecto Tor? -------------------------------------------------------------------------------- /old_versions/v1/translation_strings/Spanish/for_use_cupcake_misc-strings_es.txt: -------------------------------------------------------------------------------- 1 | Libertad en Internet 2 | Censura 3 | Libertad de expresión 4 | ¡Funciona! 5 | Funcionando 6 | No funcionando 7 | Algo está mal 8 | Por favor, compruebe su configuración. 9 | Leer más 10 | Investigar 11 | Si el problema persiste, podría no poder usar Cupcake. 12 | ¡Gracias! 13 | Cambie sus opciones 14 | Pausar 15 | Iniciar 16 | Reiniciar 17 | Parar 18 | (Cupcake reiniciará la próxima vez que abra su navegador). 19 | Guardar los cambios 20 | Por día 21 | Días 22 | (Número de personas conectadas ahora) 23 | Usuarios conectados 24 | Datos transmitidos 25 | en los pasados treinta días 26 | Desde la instalación 27 | Opciones 28 | Cupcake (pastel) 29 | -------------------------------------------------------------------------------- /old_versions/v1/wordpress-simple/cupcake.php: -------------------------------------------------------------------------------- 1 | 13 | All rights reserved. 14 | 15 | Redistribution and use in source and binary forms, with or without 16 | modification, are permitted provided that the following conditions are met: 17 | * Redistributions of source code must retain the above copyright 18 | notice, this list of conditions and the following disclaimer. 19 | * Redistributions in binary form must reproduce the above copyright 20 | notice, this list of conditions and the following disclaimer in the 21 | documentation and/or other materials provided with the distribution. 22 | * Neither the name of the software, the organization, nor the 23 | names of its contributors may be used to endorse or promote products 24 | derived from this software without specific prior written permission. 25 | 26 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 27 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 28 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 29 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY 30 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 31 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 32 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 33 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 34 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 35 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 36 | 37 | */ 38 | 39 | function cupcake() { 40 | $chosen = cupcake_quote(); 41 | echo '
42 | [info] 43 | [options]
'; 44 | } 45 | 46 | // Now we set that function up to execute when the footer is called 47 | add_action( 'wp_footer', 'cupcake' ); 48 | 49 | // We need some CSS to position errythang 50 | function cupcake_css() { 51 | // This makes sure that the positioning is also good for right-to-left languages 52 | $x = is_rtl() ? 'left' : 'right'; 53 | 54 | echo " 55 | 65 | "; 66 | } 67 | 68 | add_action( 'wp_footer', 'cupcake_css' ); -------------------------------------------------------------------------------- /old_versions/v1/wordpress/admin/index.php: -------------------------------------------------------------------------------- 1 | 15 |
16 | 17 |

18 | 19 | 24 | 25 |
26 | -------------------------------------------------------------------------------- /old_versions/v1/wordpress/admin/wp-cupcake-bridge-admin.php: -------------------------------------------------------------------------------- 1 | 22 | */ 23 | 24 | class Wp_Cupcake_Bridge_Admin { 25 | 26 | /** 27 | * The ID of this plugin. 28 | * 29 | * @since 1.0.0 30 | * @access private 31 | * @var string $plugin_name The ID of this plugin. 32 | */ 33 | private $plugin_name; 34 | 35 | /** 36 | * The version of this plugin. 37 | * 38 | * @since 1.0.0 39 | * @access private 40 | * @var string $version The current version of this plugin. 41 | */ 42 | private $version; 43 | 44 | /** 45 | * Initialize the class and set its properties. 46 | * 47 | * @since 1.0.0 48 | * @var string $plugin_name The name of this plugin. 49 | * @var string $version The version of this plugin. 50 | */ 51 | public function __construct( $plugin_name, $version ) { 52 | 53 | $this->plugin_name = $plugin_name; 54 | $this->version = $version; 55 | 56 | } 57 | 58 | /** 59 | * Add menu item for options page. 60 | * 61 | * @since 1.0.0 62 | */ 63 | public function admin_menu() { 64 | add_options_page( 'WP Cupcake Bridge', 'WP Cupcake Bridge', 'manage_options', $this->plugin_name, array($this, 'options_page')); 65 | } 66 | 67 | public function options_page() { 68 | include( plugin_dir_path( dirname( __FILE__ ) ) . 'admin/partials/wp-cupcake-bridge-options.php' ); 69 | } 70 | 71 | public function register_setting() { 72 | register_setting( $this->plugin_name, 'wp_cupcake_bridge_iframe_display', 'sanitize_key' ); 73 | } 74 | 75 | public function add_settings_section() { 76 | add_settings_section( $this->plugin_name , '', array($this, 'settings_callback'), $this->plugin_name ); 77 | } 78 | 79 | public function add_settings_fields() { 80 | add_settings_field( 'wp_cupcake_bridge_radio_on', __('Display'), array($this, 'render_radio_on'), $this->plugin_name, $this->plugin_name ); 81 | add_settings_field( 'wp_cupcake_bridge_radio_click', '', array($this, 'render_radio_click'), $this->plugin_name, $this->plugin_name ); 82 | } 83 | 84 | public function settings_callback() { 85 | _e('Select method for displaying the Flash Proxy iframe.'); 86 | } 87 | 88 | public function render_radio_on() { 89 | $value = get_option('wp_cupcake_bridge_iframe_display', 'click'); 90 | $html = ''; 92 | echo $html; 93 | } 94 | 95 | public function render_radio_click() { 96 | $value = get_option('wp_cupcake_bridge_iframe_display', 'click'); 97 | $html = ''; 99 | echo $html; 100 | } 101 | } 102 | -------------------------------------------------------------------------------- /old_versions/v1/wordpress/cupcake.php: -------------------------------------------------------------------------------- 1 | 13 | All rights reserved. 14 | 15 | Redistribution and use in source and binary forms, with or without 16 | modification, are permitted provided that the following conditions are met: 17 | * Redistributions of source code must retain the above copyright 18 | notice, this list of conditions and the following disclaimer. 19 | * Redistributions in binary form must reproduce the above copyright 20 | notice, this list of conditions and the following disclaimer in the 21 | documentation and/or other materials provided with the distribution. 22 | * Neither the name of the software, the organization, nor the 23 | names of its contributors may be used to endorse or promote products 24 | derived from this software without specific prior written permission. 25 | 26 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 27 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 28 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 29 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY 30 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 31 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 32 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 33 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 34 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 35 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 36 | 37 | */ 38 | 39 | function cupcake() { 40 | $chosen = cupcake_quote(); 41 | echo '
42 | [info] 43 | [options]
'; 44 | } 45 | 46 | // Now we set that function up to execute when the footer is called 47 | add_action( 'wp_footer', 'cupcake' ); 48 | 49 | // We need some CSS to position errythang 50 | function cupcake_css() { 51 | // This makes sure that the positioning is also good for right-to-left languages 52 | $x = is_rtl() ? 'left' : 'right'; 53 | 54 | echo " 55 | 65 | "; 66 | } 67 | 68 | add_action( 'wp_footer', 'cupcake_css' ); -------------------------------------------------------------------------------- /old_versions/v1/wordpress/includes/index.php: -------------------------------------------------------------------------------- 1 | 22 | */ 23 | class Wp_Cupcake_Bridge_Activator { 24 | 25 | /** 26 | * Short Description. 27 | * 28 | * Long Description. 29 | * 30 | * @since 1.0.0 31 | */ 32 | public static function activate() { 33 | 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /old_versions/v1/wordpress/includes/wp-cupcake-bridge-deactivator.php: -------------------------------------------------------------------------------- 1 | 22 | */ 23 | class Wp_Cupcake_Bridge_Deactivator { 24 | 25 | /** 26 | * Short Description. (use period) 27 | * 28 | * Long Description. 29 | * 30 | * @since 1.0.0 31 | */ 32 | public static function deactivate() { 33 | 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /old_versions/v1/wordpress/includes/wp-cupcake-bridge-i18n.php: -------------------------------------------------------------------------------- 1 | 26 | */ 27 | class Wp_Cupcake_Bridge_i18n { 28 | 29 | /** 30 | * The domain specified for this plugin. 31 | * 32 | * @since 1.0.0 33 | * @access private 34 | * @var string $domain The domain identifier for this plugin. 35 | */ 36 | private $domain; 37 | 38 | /** 39 | * Load the plugin text domain for translation. 40 | * 41 | * @since 1.0.0 42 | */ 43 | public function load_plugin_textdomain() { 44 | 45 | load_plugin_textdomain( 46 | $this->domain, 47 | false, 48 | dirname( dirname( plugin_basename( __FILE__ ) ) ) . '/languages/' 49 | ); 50 | 51 | } 52 | 53 | /** 54 | * Set the domain equal to that of the specified domain. 55 | * 56 | * @since 1.0.0 57 | * @param string $domain The domain that represents the locale of this plugin. 58 | */ 59 | public function set_domain( $domain ) { 60 | $this->domain = $domain; 61 | } 62 | 63 | } 64 | -------------------------------------------------------------------------------- /old_versions/v1/wordpress/includes/wp-cupcake-bridge-loader.php: -------------------------------------------------------------------------------- 1 | 23 | */ 24 | class Wp_Cupcake_Bridge_Loader { 25 | 26 | /** 27 | * The array of actions registered with WordPress. 28 | * 29 | * @since 1.0.0 30 | * @access protected 31 | * @var array $actions The actions registered with WordPress to fire when the plugin loads. 32 | */ 33 | protected $actions; 34 | 35 | /** 36 | * The array of filters registered with WordPress. 37 | * 38 | * @since 1.0.0 39 | * @access protected 40 | * @var array $filters The filters registered with WordPress to fire when the plugin loads. 41 | */ 42 | protected $filters; 43 | 44 | /** 45 | * The array of shortcodes registered with WordPress. 46 | * 47 | * @since 1.0.0 48 | * @access protected 49 | * @var array $shortcodes The shortcodes registered with WordPress to fire when the plugin loads. 50 | */ 51 | protected $shortcodes; 52 | 53 | /** 54 | * Initialize the collections used to maintain the actions, filters and shortcodes. 55 | * 56 | * @since 1.0.0 57 | */ 58 | public function __construct() { 59 | 60 | $this->actions = array(); 61 | $this->filters = array(); 62 | $this->shortcodes = array(); 63 | 64 | } 65 | 66 | /** 67 | * Add a new action to the collection to be registered with WordPress. 68 | * 69 | * @since 1.0.0 70 | * @var string $hook The name of the WordPress action that is being registered. 71 | * @var object $component A reference to the instance of the object on which the action is defined. 72 | * @var string $callback The name of the function definition on the $component. 73 | * @var int Optional $priority The priority at which the function should be fired. 74 | * @var int Optional $accepted_args The number of arguments that should be passed to the $callback. 75 | */ 76 | public function add_action( $hook, $component, $callback, $priority = 10, $accepted_args = 1 ) { 77 | $this->actions = $this->add( $this->actions, $hook, $component, $callback, $priority, $accepted_args ); 78 | } 79 | 80 | /** 81 | * Add a new filter to the collection to be registered with WordPress. 82 | * 83 | * @since 1.0.0 84 | * @var string $hook The name of the WordPress filter that is being registered. 85 | * @var object $component A reference to the instance of the object on which the filter is defined. 86 | * @var string $callback The name of the function definition on the $component. 87 | * @var int Optional $priority The priority at which the function should be fired. 88 | * @var int Optional $accepted_args The number of arguments that should be passed to the $callback. 89 | */ 90 | public function add_filter( $hook, $component, $callback, $priority = 10, $accepted_args = 1 ) { 91 | $this->filters = $this->add( $this->filters, $hook, $component, $callback, $priority, $accepted_args ); 92 | } 93 | 94 | /** 95 | * Add a new shortcode to the collection to be registered with WordPress. 96 | * 97 | * @since 1.0.0 98 | * @var string $tag The name of the WordPress filter that is being registered. 99 | * @var object $component A reference to the instance of the object on which the filter is defined. 100 | * @var string $func The name of the function definition on the $component. 101 | */ 102 | public function add_shortcode( $tag , $component, $func ) { 103 | $this->shortcodes = $this->shortcode_add( $this->shortcodes, $component, $tag, $func); 104 | } 105 | 106 | /** 107 | * A utility function that is used to register the actions and hooks into a single 108 | * collection. 109 | * 110 | * @since 1.0.0 111 | * @access private 112 | * @var array $hooks The collection of hooks that is being registered (that is, actions or filters). 113 | * @var string $hook The name of the WordPress filter that is being registered. 114 | * @var object $component A reference to the instance of the object on which the filter is defined. 115 | * @var string $callback The name of the function definition on the $component. 116 | * @var int Optional $priority The priority at which the function should be fired. 117 | * @var int Optional $accepted_args The number of arguments that should be passed to the $callback. 118 | * @return type The collection of actions and filters registered with WordPress. 119 | */ 120 | private function add( $hooks, $hook, $component, $callback, $priority, $accepted_args ) { 121 | 122 | $hooks[] = array( 123 | 'hook' => $hook, 124 | 'component' => $component, 125 | 'callback' => $callback, 126 | 'priority' => $priority, 127 | 'accepted_args' => $accepted_args 128 | ); 129 | 130 | return $hooks; 131 | 132 | } 133 | 134 | private function shortcode_add($shortcodes, $component, $tag, $func) { 135 | $shortcodes[] = array( 136 | 'component' => $component, 137 | 'tag' => $tag, 138 | 'func' => $func, 139 | ); 140 | 141 | return $shortcodes; 142 | } 143 | 144 | /** 145 | * Register the filters, actions and shortcodes with WordPress. 146 | * 147 | * @since 1.0.0 148 | */ 149 | public function run() { 150 | 151 | foreach ( $this->filters as $hook ) { 152 | add_filter( $hook['hook'], array( $hook['component'], $hook['callback'] ), $hook['priority'], $hook['accepted_args'] ); 153 | } 154 | 155 | foreach ( $this->actions as $hook ) { 156 | add_action( $hook['hook'], array( $hook['component'], $hook['callback'] ), $hook['priority'], $hook['accepted_args'] ); 157 | } 158 | 159 | foreach ( $this->shortcodes as $shortcode ) { 160 | add_shortcode( $shortcode['tag'], array($shortcode['component'], $shortcode['func'])); 161 | } 162 | 163 | } 164 | 165 | } 166 | -------------------------------------------------------------------------------- /old_versions/v1/wordpress/includes/wp-cupcake-bridge-widget.php: -------------------------------------------------------------------------------- 1 | 'wp-cupcake-bridge-iframe-class', 19 | 'description' => __( 'Displays an iframe.', 'wp-cupcake-bridge-iframe' ) 20 | ) 21 | ); 22 | 23 | // Register and enqueue widget styles and scripts 24 | add_action( 'wp_enqueue_scripts', array($this, 'enqueue_scripts') ); 25 | } 26 | 27 | /** 28 | * Outputs the content of the widget 29 | */ 30 | public function widget( $args, $instance ) { 31 | echo $args['before_widget']; 32 | include( plugin_dir_path( dirname( __FILE__ ) ) . 'public/partials/iframe.php' ); 33 | echo $args['after_widget']; 34 | } 35 | 36 | /** 37 | * Generates the administration form 38 | */ 39 | public function form( $instance ) { 40 | } 41 | 42 | /** 43 | * Sanitize widget form values as they are saved. 44 | * 45 | * @see WP_Widget::update() 46 | * 47 | * @param array $new_instance Values just sent to be saved. 48 | * @param array $old_instance Previously saved values from database. 49 | * 50 | * @return array Updated safe values to be saved. 51 | */ 52 | public function update( $new_instance, $old_instance ) { 53 | $instance = $old_instance; 54 | return $instance; 55 | } 56 | 57 | /** 58 | * Registers and enqueues widget-specific scripts. 59 | */ 60 | public function enqueue_scripts() { 61 | wp_enqueue_script( 'panzi-jquery-cookies'); 62 | wp_enqueue_script( 'wp-cupcake-bridge-social-share-privacy'); 63 | wp_enqueue_script( 'wp-cupcake-bridge-service'); 64 | wp_enqueue_script( 'wp-cupcake-bridge'); 65 | } 66 | } -------------------------------------------------------------------------------- /old_versions/v1/wordpress/includes/wp-cupcake-bridge.php: -------------------------------------------------------------------------------- 1 | 29 | */ 30 | 31 | class Wp_Cupcake_Bridge { 32 | 33 | /** 34 | * The loader that's responsible for maintaining and registering all hooks that power 35 | * the plugin. 36 | * 37 | * @since 1.0.0 38 | * @access protected 39 | * @var Plugin_Name_Loader $loader Maintains and registers all hooks for the plugin. 40 | */ 41 | protected $loader; 42 | 43 | /** 44 | * The unique identifier of this plugin. 45 | * 46 | * @since 1.0.0 47 | * @access protected 48 | * @var string $plugin_name The string used to uniquely identify this plugin. 49 | */ 50 | protected $plugin_name; 51 | 52 | /** 53 | * The current version of the plugin. 54 | * 55 | * @since 1.0.0 56 | * @access protected 57 | * @var string $version The current version of the plugin. 58 | */ 59 | protected $version; 60 | 61 | /** 62 | * Define the core functionality of the plugin. 63 | * 64 | * Set the plugin name and the plugin version that can be used throughout the plugin. 65 | * Load the dependencies, define the locale, and set the hooks for the Dashboard and 66 | * the public-facing side of the site. 67 | * 68 | * @since 1.0.0 69 | */ 70 | public function __construct() { 71 | 72 | $this->plugin_name = 'wp-cupcake-bridge'; 73 | $this->version = '1.0.0'; 74 | 75 | $this->load_dependencies(); 76 | $this->set_locale(); 77 | $this->define_admin_hooks(); 78 | $this->define_public_hooks(); 79 | 80 | } 81 | 82 | /** 83 | * Load the required dependencies for this plugin. 84 | * 85 | * Include the following files that make up the plugin: 86 | * 87 | * - Plugin_Name_Loader. Orchestrates the hooks of the plugin. 88 | * - Plugin_Name_i18n. Defines internationalization functionality. 89 | * - Plugin_Name_Admin. Defines all hooks for the dashboard. 90 | * - Plugin_Name_Public. Defines all hooks for the public side of the site. 91 | * 92 | * Create an instance of the loader which will be used to register the hooks 93 | * with WordPress. 94 | * 95 | * @since 1.0.0 96 | * @access private 97 | */ 98 | private function load_dependencies() { 99 | 100 | require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/wp-cupcake-bridge-loader.php'; 101 | 102 | require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/wp-cupcake-bridge-i18n.php'; 103 | 104 | require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/wp-cupcake-bridge-admin.php'; 105 | 106 | require_once plugin_dir_path( dirname( __FILE__ ) ) . 'public/wp-cupcake-bridge-public.php'; 107 | 108 | require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/wp-cupcake-bridge-widget.php'; 109 | 110 | $this->loader = new Wp_Cupcake_Bridge_Loader(); 111 | 112 | } 113 | 114 | /** 115 | * Define the locale for this plugin for internationalization. 116 | * 117 | * Uses the Wp_Cupcake_Bridget_i18n class in order to set the domain and to register the hook 118 | * with WordPress. 119 | * 120 | * @since 1.0.0 121 | * @access private 122 | */ 123 | private function set_locale() { 124 | 125 | $plugin_i18n = new Wp_Cupcake_Bridge_i18n(); 126 | $plugin_i18n->set_domain( $this->get_plugin_name() ); 127 | 128 | $this->loader->add_action( 'plugins_loaded', $plugin_i18n, 'load_plugin_textdomain' ); 129 | 130 | } 131 | 132 | /** 133 | * Register all of the hooks related to the dashboard functionality 134 | * of the plugin. 135 | * 136 | * @since 1.0.0 137 | * @access private 138 | */ 139 | private function define_admin_hooks() { 140 | 141 | $plugin_admin = new Wp_Cupcake_Bridge_Admin( $this->get_plugin_name(), $this->get_version() ); 142 | 143 | // Add options page. 144 | $this->loader->add_action( 'admin_menu', $plugin_admin, 'admin_menu' ); 145 | $this->loader->add_action('admin_init', $plugin_admin, 'register_setting'); 146 | $this->loader->add_action('admin_init', $plugin_admin, 'add_settings_section'); 147 | $this->loader->add_action('admin_init', $plugin_admin, 'add_settings_fields'); 148 | 149 | } 150 | 151 | /** 152 | * Register all of the hooks related to the public-facing functionality 153 | * of the plugin. 154 | * 155 | * @since 1.0.0 156 | * @access private 157 | */ 158 | private function define_public_hooks() { 159 | 160 | $plugin_public = new Wp_Cupcake_Bridge_Public( $this->get_plugin_name(), $this->get_version() ); 161 | 162 | $this->loader->add_action( 'wp_enqueue_scripts', $plugin_public, 'enqueue_scripts' ); 163 | 164 | // Add support for using shortcodes in widgets. 165 | add_filter( 'widget_text', 'do_shortcode' ); 166 | $this->loader->add_shortcode( 'wp-cupcake-bridge-iframe', $plugin_public, 'shortcode' ); 167 | 168 | // Register widget. 169 | $this->loader->add_action( 'widgets_init', $plugin_public, 'register_widget'); 170 | 171 | } 172 | 173 | /** 174 | * Run the loader to execute all of the hooks with WordPress. 175 | * 176 | * @since 1.0.0 177 | */ 178 | public function run() { 179 | $this->loader->run(); 180 | } 181 | 182 | /** 183 | * The name of the plugin used to uniquely identify it within the context of 184 | * WordPress and to define internationalization functionality. 185 | * 186 | * @since 1.0.0 187 | * @return string The name of the plugin. 188 | */ 189 | public function get_plugin_name() { 190 | return $this->plugin_name; 191 | } 192 | 193 | /** 194 | * The reference to the class that orchestrates the hooks with the plugin. 195 | * 196 | * @since 1.0.0 197 | * @return Plugin_Name_Loader Orchestrates the hooks of the plugin. 198 | */ 199 | public function get_loader() { 200 | return $this->loader; 201 | } 202 | 203 | /** 204 | * Retrieve the version number of the plugin. 205 | * 206 | * @since 1.0.0 207 | * @return string The version number of the plugin. 208 | */ 209 | public function get_version() { 210 | return $this->version; 211 | } 212 | 213 | } 214 | -------------------------------------------------------------------------------- /old_versions/v1/wordpress/index.php: -------------------------------------------------------------------------------- 1 | ') 25 | .attr('src', '//crypto.stanford.edu/flashproxy/embed.html'); 26 | } 27 | }; 28 | })(jQuery); -------------------------------------------------------------------------------- /old_versions/v1/wordpress/public/js/socialshareprivacy.cupcakebridge/javascripts/settings.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * jquery.socialshareprivacy.js | 2 Klicks fuer mehr Datenschutz 4 | * 5 | * Copyright (c) 2012-2013 Mathias Panzenböck 6 | * 7 | * is released under the MIT License http://www.opensource.org/licenses/mit-license.php 8 | * 9 | * Spread the word, link to us if you can. 10 | */ 11 | 12 | // load global settings 13 | jQuery(document).ready(function ($) { 14 | "use strict"; 15 | 16 | $('script[type="application/x-social-share-privacy-settings"]').each(function () { 17 | var settings = (new Function('return ('+(this.textContent||this.innerText||this.text)+');')).call(this); 18 | 19 | if (typeof settings === "object") { 20 | $.extend(true, $.fn.socialSharePrivacy.settings, settings); 21 | } 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /old_versions/v1/wordpress/public/js/socialshareprivacy.cupcakebridge/stylesheets/common.css: -------------------------------------------------------------------------------- 1 | .social_share_privacy_area { 2 | clear: both; 3 | margin: 5px 0; 4 | list-style-type: none; 5 | padding: 0; 6 | width: auto; 7 | display: block; 8 | } 9 | .social_share_privacy_area.line { 10 | height: 25px; 11 | line-height: 16px; 12 | } 13 | .social_share_privacy_area.box { 14 | width: 95px; 15 | } 16 | .social_share_privacy_area li { 17 | margin: 0 !important; 18 | padding: 0 !important; 19 | list-style-type: none !important; 20 | } 21 | .social_share_privacy_area.box li { 22 | text-align: center; 23 | } 24 | .social_share_privacy_area.line li { 25 | height: 21px; 26 | float: left; 27 | } 28 | .social_share_privacy_area li .dummy_btn { 29 | cursor: pointer; 30 | padding: 0; 31 | height: inherit; 32 | } 33 | .social_share_privacy_area.line li .dummy_btn { 34 | float: left; 35 | margin: 0 20px 0 10px; 36 | } 37 | .social_share_privacy_area.box li .dummy_btn { 38 | margin-bottom: 10px; 39 | } 40 | .social_share_privacy_area li .dummy_btn img.privacy_dummy, 41 | .social_share_privacy_area li .dummy_btn iframe { 42 | vertical-align: bottom; 43 | } 44 | .social_share_privacy_area li .dummy_btn iframe { 45 | overflow: hidden; 46 | height: inherit; 47 | width: inherit; 48 | border-style: none; 49 | } 50 | .social_share_privacy_area.line li { 51 | display: inline-block; 52 | } 53 | /* Switch begin */ 54 | .social_share_privacy_area li .switch { 55 | display: inline-block; 56 | text-indent: -9999em; 57 | background: transparent url(../images/socialshareprivacy_on_off.png) no-repeat 0 0 scroll; 58 | width: 23px; 59 | height: 12px; 60 | overflow: hidden; 61 | margin: 4px 0 0; 62 | padding: 0; 63 | cursor: pointer; 64 | } 65 | .social_share_privacy_area.line li .switch { 66 | float: left; 67 | } 68 | .social_share_privacy_area li .switch.on { 69 | background-position: 0 -12px; 70 | } 71 | /* Switch end */ 72 | /* Tooltips begin */ 73 | .social_share_privacy_area li.help_info { 74 | position: relative; 75 | } 76 | .social_share_privacy_area li.settings_info, 77 | .social_share_privacy_area li.help_info .info { 78 | text-align: left; 79 | } 80 | .social_share_privacy_area li.help_info .info, 81 | .social_share_privacy_area li .help_info.icon .info { 82 | display: none; 83 | position: absolute; 84 | bottom: 40px; 85 | width: 290px; 86 | padding: 10px 15px; 87 | margin: 0; 88 | font-size: 12px; 89 | line-height: 16px; 90 | font-weight: bold; 91 | border: 1px solid #ccc; 92 | -moz-border-radius: 4px; 93 | -webkit-border-radius: 4px; 94 | border-radius: 4px; 95 | -moz-box-shadow: 0px 0px 15px rgba(0,0,0,0.4); 96 | -webkit-box-shadow: 0px 0px 15px rgba(0,0,0,0.4); 97 | box-shadow: 0px 0px 15px rgba(0,0,0,0.4); 98 | background-color: #fdfbec; 99 | color: #000; 100 | z-index: 500; 101 | } 102 | .social_share_privacy_area.line li.help_info .info, 103 | .social_share_privacy_area li .help_info.icon .info { 104 | left: 0; 105 | } 106 | .social_share_privacy_area.box li.help_info .info { 107 | left: 100%; 108 | top: 0px; 109 | bottom: auto; 110 | } 111 | .social_share_privacy_area li .help_info.icon .info { 112 | width: 350px; 113 | } 114 | .social_share_privacy_area li.help_info.display .info, 115 | .social_share_privacy_area li .help_info.icon.display .info { 116 | display: block; 117 | } 118 | .social_share_privacy_area li.help_info.info_off.display .info { 119 | display: none; 120 | } 121 | .social_share_privacy_area li .help_info.icon { 122 | background: #fff url(../images/socialshareprivacy_info.png) no-repeat center center scroll; 123 | width: 25px; 124 | height: 20px; 125 | position: relative; 126 | display: inline-block; 127 | vertical-align: top; 128 | border: 2px solid #e7e3e3; 129 | border-right-width: 0; 130 | -moz-border-radius: 5px 0 0 5px; 131 | -webkit-border-radius: 5px 0 0 5px; 132 | border-radius: 5px 0 0 5px; 133 | margin: 0; 134 | padding: 0; 135 | } 136 | .social_share_privacy_area li.settings_info .settings_info_menu.perma_option_off .help_info.icon { 137 | border-right-width: 2px; 138 | -moz-border-radius: 5px; 139 | -webkit-border-radius: 5px; 140 | border-radius: 5px; 141 | } 142 | /* Tooltips end */ 143 | /* Settings/Info begin */ 144 | .social_share_privacy_area li.settings_info { 145 | position: relative; 146 | top: -2px; 147 | } 148 | .social_share_privacy_area li.settings_info a { 149 | text-decoration: none; 150 | margin: 0 !important; 151 | } 152 | .social_share_privacy_area li.settings_info .settings_info_menu { 153 | background-color: #f3f4f5; 154 | color: #000; 155 | border-style: none; 156 | -moz-border-radius: 5px; 157 | -webkit-border-radius: 5px; 158 | border-radius: 5px; 159 | -moz-box-shadow: 0px 0px 15px rgba(0,0,0,0.4); 160 | -webkit-box-shadow: 0px 0px 15px rgba(0,0,0,0.4); 161 | box-shadow: 0px 0px 15px rgba(0,0,0,0.4); 162 | left: 0; 163 | position: absolute; 164 | top: 0; 165 | min-width: 135px; 166 | margin: 0; 167 | padding: 0; 168 | } 169 | .social_share_privacy_area li.settings_info .settings_info_menu.on { 170 | z-index: 1000; 171 | } 172 | .social_share_privacy_area li.settings_info .settings_info_menu.off { 173 | border-width: 0; 174 | -moz-box-shadow: none; 175 | -webkit-box-shadow: none; 176 | box-shadow: none; 177 | background-color: transparent; 178 | } 179 | .social_share_privacy_area li.settings_info .settings_info_menu.off form { 180 | display: none; 181 | margin: 0; 182 | padding: 0; 183 | } 184 | .social_share_privacy_area li.settings_info .settings_info_menu .settings { 185 | text-indent: -9999em; 186 | display: inline-block; 187 | background: #fff url(../images/settings.png) no-repeat center center scroll; 188 | width: 25px; 189 | height: 20px; 190 | border: 2px solid #e7e3e3; 191 | -moz-border-radius: 0 5px 5px 0; 192 | -webkit-border-radius: 0 5px 5px 0; 193 | border-radius: 0 5px 5px 0; 194 | border-left: 1px solid #ddd; 195 | margin: 0; 196 | padding: 0; 197 | } 198 | .social_share_privacy_area li.settings_info .settings_info_menu form fieldset { 199 | border-width: 0; 200 | margin: 0; 201 | padding: 0 10px 10px; 202 | } 203 | .social_share_privacy_area li.settings_info .settings_info_menu form fieldset legend { 204 | font-size: 11px; 205 | font-weight: bold; 206 | line-height: 14px; 207 | margin: 0; 208 | padding: 10px 0; 209 | width: 115px; 210 | } 211 | .social_share_privacy_area li.settings_info .settings_info_menu form fieldset input { 212 | margin: 4px 10px 4px 0; 213 | padding: 0; 214 | } 215 | .social_share_privacy_area li.settings_info .settings_info_menu form fieldset label { 216 | display: block; 217 | font-size: 12px; 218 | font-weight: bold; 219 | line-height: 24px; 220 | -moz-transition: color .5s ease-in; 221 | -webkit-transition: color .5s ease-in; 222 | transition: color .5s ease-in; 223 | margin: 0; 224 | padding: 0; 225 | white-space: nowrap; 226 | } 227 | .social_share_privacy_area li.settings_info .settings_info_menu form fieldset label.checked { 228 | color: #090; 229 | } 230 | /* Settings/Info end */ 231 | -------------------------------------------------------------------------------- /old_versions/v1/wordpress/public/js/socialshareprivacy.cupcakebridge/stylesheets/modules/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glamrock/cupcake/5fd2363979f9cffde7c29cab77d415bbce803058/old_versions/v1/wordpress/public/js/socialshareprivacy.cupcakebridge/stylesheets/modules/.DS_Store -------------------------------------------------------------------------------- /old_versions/v1/wordpress/public/js/socialshareprivacy.cupcakebridge/stylesheets/modules/cupcakebridge.css: -------------------------------------------------------------------------------- 1 | .social_share_privacy_area.line li.cupcakebridge .dummy_btn { 2 | width: 80px; 3 | height: 15px; 4 | } 5 | 6 | .social_share_privacy_area.line .settings_info a { 7 | border-bottom: none; 8 | } 9 | 10 | -------------------------------------------------------------------------------- /old_versions/v1/wordpress/public/js/socialshareprivacy.cupcakebridge/stylesheets/socialshareprivacy.css: -------------------------------------------------------------------------------- 1 | @import url("common.css"); 2 | @import url("modules/cupcakebridge.css"); 3 | -------------------------------------------------------------------------------- /old_versions/v1/wordpress/public/js/wp-cupcake-bridge-public.js: -------------------------------------------------------------------------------- 1 | (function( $ ) { 2 | 'use strict'; 3 | 4 | $(function () { 5 | $('.share-cupcakebridge').socialSharePrivacy({ 6 | info_link : 'http://cupcakebridge.com', 7 | txt_help : '', 8 | path_prefix : '/wp-content/plugins/wp-cupcake-bridge/public/js/socialshareprivacy.cupcakebridge/', 9 | perma_option : true, 10 | settings_perma: "" 11 | }); 12 | }); 13 | 14 | })( jQuery ); 15 | -------------------------------------------------------------------------------- /old_versions/v1/wordpress/public/partials/iframe.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /old_versions/v1/wordpress/public/wp-cupcake-bridge-public.php: -------------------------------------------------------------------------------- 1 | 22 | */ 23 | class Wp_Cupcake_Bridge_Public { 24 | 25 | /** 26 | * The ID of this plugin. 27 | * 28 | * @since 1.0.0 29 | * @access private 30 | * @var string $plugin_name The ID of this plugin. 31 | */ 32 | private $plugin_name; 33 | 34 | /** 35 | * The version of this plugin. 36 | * 37 | * @since 1.0.0 38 | * @access private 39 | * @var string $version The current version of this plugin. 40 | */ 41 | private $version; 42 | 43 | /** 44 | * Initialize the class and set its properties. 45 | * 46 | * @since 1.0.0 47 | * @var string $plugin_name The name of the plugin. 48 | * @var string $version The version of this plugin. 49 | */ 50 | public function __construct( $plugin_name, $version ) { 51 | 52 | $this->plugin_name = $plugin_name; 53 | $this->version = $version; 54 | 55 | } 56 | 57 | /** 58 | * Return the shortcode. 59 | * 60 | * @since 1.0.0 61 | */ 62 | public function shortcode() { 63 | if (get_option('wp_cupcake_bridge_iframe_display') == 'on') { 64 | return ''; 65 | } 66 | wp_enqueue_script( 'panzi-jquery-cookies'); 67 | wp_enqueue_script( 'wp-cupcake-bridge-social-share-privacy'); 68 | wp_enqueue_script( 'wp-cupcake-bridge-service'); 69 | wp_enqueue_script( 'wp-cupcake-bridge'); 70 | return ''; 71 | } 72 | 73 | /** 74 | * Register a widget. 75 | * 76 | * @since 1.0.0 77 | */ 78 | public function register_widget() { 79 | register_widget('Wp_Cupcake_Bridge_Widget'); 80 | } 81 | 82 | /** 83 | * Register the stylesheets for the public-facing side of the site. 84 | * 85 | * @since 1.0.0 86 | */ 87 | public function enqueue_styles() { 88 | 89 | wp_enqueue_style( $this->plugin_name, plugin_dir_url( __FILE__ ) . 'css/wp-cupcake-bridge-public.css', array(), $this->version, 'all' ); 90 | 91 | } 92 | 93 | /** 94 | * Enqueue the stylesheets for the public-facing side of the site. 95 | * 96 | * @since 1.0.0 97 | */ 98 | public function enqueue_scripts() { 99 | 100 | wp_register_script( 'panzi-jquery-cookies', plugin_dir_url( __FILE__ ) . '/js/socialshareprivacy.cupcakebridge/javascripts/jquery.cookies.js', array('jquery'), $this->version, true ); 101 | wp_register_script( 'wp-cupcake-bridge-social-share-privacy', plugin_dir_url( __FILE__ ) . '/js/socialshareprivacy.cupcakebridge/javascripts/socialshareprivacy.js', array('jquery', 'panzi-jquery-cookies'), $this->version, true ); 102 | wp_register_script( 'wp-cupcake-bridge-service', plugin_dir_url( __FILE__ ) . '/js/socialshareprivacy.cupcakebridge/javascripts/modules/cupcakebridge.js', array('jquery', 'panzi-jquery-cookies'), $this->version, true ); 103 | wp_register_script( 'wp-cupcake-bridge', plugin_dir_url( __FILE__ ) .'/js/wp-cupcake-bridge-public.js' , array('jquery'), $this->version, true ); 104 | 105 | } 106 | 107 | 108 | 109 | 110 | } 111 | -------------------------------------------------------------------------------- /old_versions/v1/wordpress/uninstall.php: -------------------------------------------------------------------------------- 1 | run(); 48 | 49 | } 50 | run_wp_cupcake_bridge(); 51 | -------------------------------------------------------------------------------- /pink-snowball/chrome/background.js: -------------------------------------------------------------------------------- 1 | var fp = new FlashProxy(); 2 | 3 | fp.on_proxy_start = function() { 4 | chrome.browserAction.setIcon({ "path": "images/active_icon.png"}); 5 | }; 6 | 7 | fp.on_proxy_end = function() { 8 | // return to default icon 9 | chrome.browserAction.setIcon({ "path": "images/cupcake48.png"}); 10 | }; 11 | 12 | fp.on_disable = function() { 13 | chrome.browserAction.setIcon({ "path": "images/disabled_icon.png"}); 14 | }; 15 | 16 | fp.on_die = function() { 17 | chrome.browserAction.setIcon({ "path": "images/active_icon.png"}); 18 | }; 19 | 20 | if (flashproxy_should_disable()) 21 | fp.disable(); 22 | 23 | fp.start(); 24 | -------------------------------------------------------------------------------- /pink-snowball/chrome/images/active_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glamrock/cupcake/5fd2363979f9cffde7c29cab77d415bbce803058/pink-snowball/chrome/images/active_icon.png -------------------------------------------------------------------------------- /pink-snowball/chrome/images/cupcake128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glamrock/cupcake/5fd2363979f9cffde7c29cab77d415bbce803058/pink-snowball/chrome/images/cupcake128.png -------------------------------------------------------------------------------- /pink-snowball/chrome/images/cupcake24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glamrock/cupcake/5fd2363979f9cffde7c29cab77d415bbce803058/pink-snowball/chrome/images/cupcake24.png -------------------------------------------------------------------------------- /pink-snowball/chrome/images/cupcake36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glamrock/cupcake/5fd2363979f9cffde7c29cab77d415bbce803058/pink-snowball/chrome/images/cupcake36.png -------------------------------------------------------------------------------- /pink-snowball/chrome/images/cupcake48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glamrock/cupcake/5fd2363979f9cffde7c29cab77d415bbce803058/pink-snowball/chrome/images/cupcake48.png -------------------------------------------------------------------------------- /pink-snowball/chrome/images/disabled_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glamrock/cupcake/5fd2363979f9cffde7c29cab77d415bbce803058/pink-snowball/chrome/images/disabled_icon.png -------------------------------------------------------------------------------- /pink-snowball/chrome/images/grey_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glamrock/cupcake/5fd2363979f9cffde7c29cab77d415bbce803058/pink-snowball/chrome/images/grey_icon.png -------------------------------------------------------------------------------- /pink-snowball/chrome/license.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2012-2016, Griffin Boyce 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions are met: 6 | * Redistributions of source code must retain the above copyright 7 | notice, this list of conditions and the following disclaimer. 8 | * Redistributions in binary form must reproduce the above copyright 9 | notice, this list of conditions and the following disclaimer in the 10 | documentation and/or other materials provided with the distribution. 11 | * Neither the name of the nor the 12 | names of its contributors may be used to endorse or promote products 13 | derived from this software without specific prior written permission. 14 | 15 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 16 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 17 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 18 | DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY 19 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 20 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 21 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 22 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 24 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 | -------------------------------------------------------------------------------- /pink-snowball/chrome/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Cupcake", 3 | "version": "1.301", 4 | "manifest_version": 2, 5 | "description": "Snowflake for Chrome", 6 | "background": { "scripts": ["snowflake.js", "background.js"]}, 7 | "icons": { 8 | "24" : "images/cupcake24.png", 9 | "32" : "images/cupcake36.png", 10 | "38" : "images/cupcake48.png", 11 | "48" : "images/cupcake48.png", 12 | "128" : "images/cupcake128.png" 13 | }, 14 | "browser_action": { 15 | "default_icon": "images/cupcake48.png", 16 | "default_title": "Cupcake", 17 | "default_popup": "menu.html" 18 | }, 19 | "incognito": "split", 20 | "permissions": [ 21 | "http://snowflake-broker.bamsoftware.com/*", 22 | "https://snowflake-broker.bamsoftware.com/*", 23 | "https://snowflake.bamsoftware.com/*", 24 | "http://snowflake.bamsoftware.com/*", 25 | "https://snowflake.bamsoftware.com:443/*" 26 | 27 | "background", 28 | "cookies" ], 29 | "content_security_policy": "script-src 'self' 'unsafe-eval' https://*.stanford.edu/ https://*.bamsoftware.com/ https://*.fp-facilitator.org/; object-src 'self'" 30 | } 31 | -------------------------------------------------------------------------------- /pink-snowball/chrome/menu.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Cupcake 6 | 7 | 8 | 9 | 10 | 11 |

What do the icons mean?

12 |

Working: If you see a pink cupcake, your proxy is running.

13 |

a bright pink cupcake with purple wrapper A plain pink cupcake means the proxy is running but no one is using it right now.

14 |

a jolly pink cupcake with a fantastic moustache A happy cupcake means someone is using your proxy right now. Neat!

15 |
16 |

Not working: In some cases, Cupcake may temporarily disable itself. Usually this is due to internet connection problems or firewall settings.

17 |

a dull grey cupcake has deactivated itself A sad grey cupcake means that the badge has disabled itself. You may be behind a firewall that is blocking outgoing connections temporarily (such as at a cafe). Cupcake will automatically reconnect.

18 |
19 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /pink-snowball/chrome/menu.js: -------------------------------------------------------------------------------- 1 | window.onload = main; 2 | 3 | function main() { 4 | var bp = chrome.extension.getBackgroundPage(); 5 | } 6 | -------------------------------------------------------------------------------- /pink-snowball/chrome/style.css: -------------------------------------------------------------------------------- 1 | body { 2 | width:350px; 3 | min-height:400px; 4 | overflow-x:hidden; 5 | overflow-y:scroll; 6 | margin: 10px; 7 | padding: 0; 8 | color: #fff; 9 | font-family: Verdana, Helvetica, sans-serif; 10 | font-size: 14px;; 11 | line-height: 1.5em; 12 | background-image: linear-gradient(to right,#1f2632 0%,#28354d 100%); 13 | } 14 | 15 | strong { 16 | color: #E37D92; 17 | } 18 | 19 | a, a:link { 20 | color: #E37D92; 21 | font-weight: normal; 22 | text-decoration: none; 23 | border-bottom:1px dotted #ffffff; 24 | } 25 | 26 | a:visited { 27 | color: #b9939e; 28 | } 29 | 30 | hr { 31 | border: 0; 32 | height: 1px; 33 | background-image: -webkit-linear-gradient(left, rgba(255,255,255,0), rgba(255,255,255,0.75), rgba(255,255,255,0)); 34 | 35 | } 36 | 37 | p { margin: 0 0 10px 0; padding: 0; text-shadow: 1px 1px 1px #000; 38 | background-color: rgba(17, 9, 56, 0.06); 39 | } 40 | 41 | h1, h2, h3, h4, h5, h6 { color: #E9C1EE; font-weight: normal; font-family: Verdana, Helvetica, sans-serif; text-align: center;} 42 | 43 | h3 { font-size: 22px; margin: 0 0 10px; padding: 0; } 44 | 45 | #status { 46 | float: left; 47 | } 48 | #statusmeans { 49 | clear: both; 50 | } 51 | #badge-container { 52 | padding: 9px 5px; 53 | display: inline-block; 54 | } 55 | #flashproxy-badge { 56 | border-spacing: 0px; 57 | } 58 | #flashproxy-badge.idle { 59 | background-color: #227; 60 | } 61 | #flashproxy-badge.active { 62 | background-color: #28f; 63 | } 64 | #flashproxy-badge.disabled { 65 | background-color: #777; 66 | } 67 | #flashproxy-badge.dead { 68 | background-color: #111; 69 | } 70 | #flashproxy-badge td { 71 | margin: 0; 72 | padding: 0; 73 | vertical-align: middle; 74 | text-align: center; 75 | } 76 | #flashproxy-badge a img { 77 | border: 0; 78 | } 79 | -------------------------------------------------------------------------------- /security/audit1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glamrock/cupcake/5fd2363979f9cffde7c29cab77d415bbce803058/security/audit1.pdf -------------------------------------------------------------------------------- /v1_readme.md: -------------------------------------------------------------------------------- 1 | # Note: this is a copy of the v1/v2 project notes. It does not represent the current status of the project. 2 | 3 | Cupcake Bridge helps users makes bridges automagically! 4 | Get the Cupcake browser extension for [Chrome](https://chrome.google.com/webstore/detail/cupcake/dajjbehmbnbppjkcnpdkaniapgdppdnc) and [Firefox](https://addons.mozilla.org/en-us/firefox/addon/cupcakebridge/) 5 | 6 | ### Releases 7 | * Chrome - [download on google](https://chrome.google.com/webstore/detail/cupcake/dajjbehmbnbppjkcnpdkaniapgdppdnc) 8 | * Firefox - [download from Mozilla](https://addons.mozilla.org/en-us/firefox/addon/cupcakebridge/) (Special thanks to [Uzair Farooq](uzairfarooq11@gmail.com) for creating the original Firefox port of Cupcake. 9 | * Opera 26 (works on v15+) 10 | * Wordpress 11 | * Facebook App (html5/css3/javascript) 12 | * Flex shim 13 | * Drupal 7+ module 14 | 15 | ### Security 16 | In 2015, a full security audit of both Cupcake and Flashproxy was conducted by Cure53. Both projects passed the audit with compliments. The full report is [available here](https://github.com/glamrock/cupcake/blob/master/security/audit1.pdf). 17 | 18 | ### What even is Cupcake? 19 | Cupcake uses something called Flashproxy to create special Tor pathways that are harder to block. As with all circumvention projects, there's a *lot* more to it than that, but that is the jist. Flashproxy was created by David Fifield, and there is a lot of ongoing research in this area. You can learn more at the Stanford Flashproxy site. Cupcake exists as an easy way to distribute Flashproxy, with the goal of getting as many people to become bridges as possible. 20 | 21 | Cupcake can be distributed in two ways: 22 | * As a chrome or firefox add-on (turning your computer in to a less temporary proxy) 23 | * As a module/theme/app on popular web platforms (turning every visitor to your site in to a temporary proxy) 24 | 25 | ### What the frak is a Flashproxy? 26 | There is this thing called a Flash Proxy[[1](https://crypto.stanford.edu/flashproxy/)] - basically a code snippet that you run on sites and visitors become tor bridges temporarily. 27 | 28 | I kind of love/hate the idea, because visitors aren't willing participants and the bridges last a short short while. But it means that you don't have to run the whole Tor shebang if you only want to make bridges. It's really innovative, and uses technology that the majority of computer owners have enabled (JavaScript). 29 | 30 | So, what I decided to do is take that same client-side code snippets and turn it into a browser extension. People install it and they opt-in to become really robust bridges. It was a total experiment, but it went so well that I decided to expand the project. 31 | 32 | ### But... why bother with flash proxies? 33 | *"The purpose of this project is to create many ephemeral bridge IP 34 | addresses, with the goal of outpacing a censor's ability to block them. 35 | Rather than increasing the number of bridges at static addresses, we aim 36 | to make existing bridges reachable by a larger and changing pool of 37 | addresses."* [[2](https://gitweb.torproject.org/flashproxy.git/blob/HEAD:/README)] 38 | 39 | ### Oh. Well okay then. Carry on. 40 | [I knew you'd come around!](https://www.youtube.com/watch?v=HrlSkcHQnwI) 41 | 42 | ### How to help 43 | The easiest way to help the project is by installing one of the browser extensions. It's not resource intensive at *all* -- flashproxy uses about as much bandwidth in a day as a 5-minute YouTube video (around 6mb). 44 | 45 | * Translation - [Help Out!](https://www.transifex.com/projects/p/cupcake/) 46 | 47 | ### High-priority tasks that are difficult to fix 48 | * Enabling wordpress.COM users to add flashproxy to their theme. (Can you help with this? Send me an email! griffin @ cryptolab.net ) 49 | 50 | ### Low-priority tasks that demand a lot of time 51 | * Joomla Extension 52 | * Flash/SWF App Shim (actionscript & html) 53 | 54 | ### Failed experiments 55 | * /img-embed 56 | 57 | ### Surprisingly-sucessful experiments 58 | * Tumblr post demo [post](http://newhopegriffin.tumblr.com/post/47018950850/le-demo) 59 | * Tumblr theme demo 60 | * Facebook App (html5/css3/javascript) 61 | 62 | ### Code notes 63 | #### chrome/manifest.json 64 | - *incognito:split* This is useful during testing, so that incognito won't use cookies from standard browsing mode. 65 | - *incognito:spanning* When deployed, prevents incognito windows from creating additional Cupcake processes. Proxy will continue even if all the browser windows are in incognito mode. 66 | - *permissions:background* is used so that the extension will notify of updates and display the post-installation page. Also used so that Cupcake will start/run on startup, before the browser is started (Windows only). 67 | - *permissions:cookies* allows reading/writing of cookies, but may not be necessary, since Cupcake doesn't currently use the Cookies API. 68 | 69 | #### Financials 70 | Much of the Cupcake Bridge projects are self-funded by @glamrock, but the Chrome and Firefox extensions were covered under a generous grant from the [Open Tech Fund](https://www.opentech.fund/project/cupcake-bridge) from 2013-2014. 71 | 72 | ### License 73 | My software is free to use, free to give to friends, & open-source, so everyone can make sure it's safe for people to use. Want to make changes? Go for it! :dog: Cupcake uses the Revised BSD license -- see license.txt for more legal info. 74 | 75 | #### Cute dog 76 | ![dawww, lookit dat little tongue so cute](http://i.imgur.com/JYO9P6j.jpg) 77 | 78 | ### References 79 | [1] https://crypto.stanford.edu/flashproxy/ 80 | [2] https://gitweb.torproject.org/flashproxy.git/blob/HEAD:/README 81 | [3] https://gitweb.torproject.org/flashproxy.git/tree/proxy 82 | --------------------------------------------------------------------------------