page generation update for: 2024-03-20 13:05:26.624594558 -0400 EDT m=+193.524147205

This commit is contained in:
eyedeekay
2024-03-20 13:05:26 -04:00
parent 599f3499bd
commit 0e14574aed
13 changed files with 2289 additions and 913 deletions

View File

@ -8,90 +8,113 @@
<meta name="keywords" content="master" /> <meta name="keywords" content="master" />
<link rel="stylesheet" type="text/css" href="style.css" /> <link rel="stylesheet" type="text/css" href="style.css" />
<link rel="stylesheet" type="text/css" href="showhider.css" /> <link rel="stylesheet" type="text/css" href="showhider.css" />
<link rel="stylesheet" type="text/css" href="darklight.css" />
</head> </head>
<body> <body>
<div id="navbar"> <input type="checkbox" id="checkboxDarkLight">
<a href="#shownav"> <div class="container">
Show navigation <div id="navbar">
</a> <a href="#shownav">
<div id="shownav"> Show navigation
<div id="hidenav"> </a>
<ul> <div id="shownav">
<li> <div id="hidenav">
<a href=".."> <ul>
Up one level ^ <li>
</a> <a href="..">
</li> Up one level ^
<li> </a>
<a href="index.html"> </li>
index <li>
</a> <a href="index.html">
</li> index
<li> </a>
<a href="LICENSE.html"> </li>
LICENSE <li>
</a> <a href="LICENSE.html">
</li> LICENSE
<li> </a>
<a href="UPDATES.html"> </li>
UPDATES <li>
</a> <a href="index.html">
</li> index.html
</ul> </a>
<br> </li>
<a href="#hidenav"> <li>
Hide Navigation <a href="docs/GOALS.html">
</a> docs/GOALS
</a>
</li>
<li>
<a href="docs/PRINCIPLES.html">
docs/PRINCIPLES
</a>
</li>
<li>
<a href="docs/RELEASE.html">
docs/RELEASE
</a>
</li>
<li>
<a href="docs/UPDATES.html">
docs/UPDATES
</a>
</li>
</ul>
<br>
<a href="#hidenav">
Hide Navigation
</a>
</div>
</div> </div>
</div> </div>
</div> <a id="returnhome" href="/">
<a id="returnhome" href="/"> /
/
</a>
<p>
Copyright 2018
</p>
<p>
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the &ldquo;Software&rdquo;), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
</p>
<p>
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
</p>
<p>
THE SOFTWARE IS PROVIDED &ldquo;AS IS&rdquo;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
</p>
<div id="sourcecode">
<span id="sourcehead">
<strong>
Get the source code:
</strong>
</span>
<ul>
<li>
<a href="https://github.com/eyedeekay/i2p.firefox">
Source Repository: (https://github.com/eyedeekay/i2p.firefox)
</a>
</li>
</ul>
</div>
<div>
<a href="#show">
Show license
</a> </a>
<div id="show"> <p>
<div id="hide"> Copyright 2018
<pre><code>Copyright 2018 </p>
<p>
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the &ldquo;Software&rdquo;), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
</p>
<p>
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
</p>
<p>
THE SOFTWARE IS PROVIDED &ldquo;AS IS&rdquo;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
</p>
<div id="sourcecode">
<span id="sourcehead">
<strong>
Get the source code:
</strong>
</span>
<ul>
<li>
<a href="https://github.com/eyedeekay/i2p.firefox">
Source Repository: (https://github.com/eyedeekay/i2p.firefox)
</a>
</li>
</ul>
</div>
<div>
<a href="#show">
Show license
</a>
<div id="show">
<div id="hide">
<pre><code>Copyright 2018
Permission is hereby granted, free of charge, to any person obtaining a copy of Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in this software and associated documentation files (the "Software"), to deal in
@ -110,9 +133,10 @@ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
</code></pre> </code></pre>
<a href="#hide"> <a href="#hide">
Hide license Hide license
</a> </a>
</div>
</div> </div>
</div> </div>
</div> </div>
@ -121,7 +145,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
</div> </div>
<div> <div>
<a href="https://geti2p.net/"> <a href="https://geti2p.net/">
<img src="i2plogo.png"></img> <img class="i2plogo" src="i2plogo.png"></img>
I2P I2P
</a> </a>
</div> </div>

View File

@ -147,3 +147,24 @@
* start a changelog * start a changelog
* add version to the profile, independent of installer version * add version to the profile, independent of installer version
- version 0.1 corresponds to IDK version 0.03b - version 0.1 corresponds to IDK version 0.03b
## Checksums
```
621301bd5f0e0ef1879ed16f8a40d5da9444525755736411fe1e326192f90cb2 I2P-EXE-2.4.992.exe
decbdef9ef24f6b614027afb006dc7ee4b4817f48a25dbd6af440a6f2be5ecb3 I2P-Easy-Install-Bundle-2.4.992.exe
bf6f5d162885798072cd61c098bbe871571ac116aaed411b330bab247064e399 I2P-MSI-2.4.992.msi
0b9c68a6d97727140e56bc80c0096db9340ce12d5bdb7cc3252713a7bb0d33ca I2P-windows-portable.zip
18d68eeb61762f0b8cef3505802b5d4a2fa1327fa0fd8f2f41775328361be60b I2P.tar.gz
669d353ea064a6a660ef94e8d70728f011e81f98b0fbf298b4d124bbcec7ba83 changelog.txt
```
```
I2P-EXE-2.4.992.exe: PE32+ executable (GUI) x86-64, for MS Windows
I2P-Easy-Install-Bundle-2.4.992.exe: PE32 executable (GUI) Intel 80386, for MS Windows, Nullsoft Installer self-extracting archive
I2P-MSI-2.4.992.msi: Composite Document File V2 Document, Little Endian, Os: Windows, Version 6.2, MSI Installer, Code page: 1252, Title: Installation Database, Subject: I2P-MSI, Author: Unknown, Keywords: Installer, Comments: This installer database contains the logic and data required to install I2P-MSI., Template: x64;1033, Revision Number: {F44ACC17-351A-4424-A4F5-7F9E52BBE96E}, Create Time/Date: Wed Mar 20 02:46:40 2024, Last Saved Time/Date: Wed Mar 20 02:46:40 2024, Number of Pages: 200, Number of Words: 10, Name of Creating Application: Windows Installer XML Toolset (3.14.0.8606), Security: 2
I2P-windows-portable.zip: Zip archive data, at least v2.0 to extract, compression method=deflate
I2P.tar.gz: gzip compressed data, from Unix, original size modulo 2^32 766935040
changelog.txt: ASCII text
```

24
darklight.css Normal file
View File

@ -0,0 +1,24 @@
/* edgar darklight CSS file */
#checkboxDarkLight:checked + .container {
background-color: #202020;
filter: invert(100%);
}
#checkboxDarkLight{
appearance: none;
width: 80px;
height: 40px;
background: black;
border-radius: 22px;
cursor: pointer;
outline: none;
}
#checkboxDarkLight::before{
content: '';
width: 40px;
height: 35px;
background-color:white;
border-radius: 35px;
cursor: pointer;
transition: .3s linear;
}

553
docs/GOALS.html Normal file
View File

@ -0,0 +1,553 @@
<html>
<head>
<title>
I2P Easy-Install...
</title>
<meta name="author" content="eyedeekay" />
<meta name="description" content="i2p.firefox" />
<meta name="keywords" content="master" />
<link rel="stylesheet" type="text/css" href="style.css" />
<link rel="stylesheet" type="text/css" href="showhider.css" />
<link rel="stylesheet" type="text/css" href="darklight.css" />
</head>
<body>
<input type="checkbox" id="checkboxDarkLight">
<div class="container">
<div id="navbar">
<a href="#shownav">
Show navigation
</a>
<div id="shownav">
<div id="hidenav">
<ul>
<li>
<a href="..">
Up one level ^
</a>
</li>
<li>
<a href="index.html">
index
</a>
</li>
<li>
<a href="LICENSE.html">
LICENSE
</a>
</li>
<li>
<a href="index.html">
index.html
</a>
</li>
<li>
<a href="GOALS.html">
GOALS
</a>
</li>
<li>
<a href="PRINCIPLES.html">
PRINCIPLES
</a>
</li>
<li>
<a href="RELEASE.html">
RELEASE
</a>
</li>
<li>
<a href="UPDATES.html">
UPDATES
</a>
</li>
</ul>
<br>
<a href="#hidenav">
Hide Navigation
</a>
</div>
</div>
</div>
<a id="returnhome" href="/">
/
</a>
<h1>
Feature Goals
</h1>
<p>
For information about the &ldquo;Goals guiding the Goals&rdquo; see:
<code>
[PRINCIPLES]
</code>
.
</p>
<p>
While Windows is the primary platform, some goals may represent cross-platform
utility as well. Since a portable jpackage really only needs slightly different
arguments on different platforms, cross-platform support is often low-cost.
</p>
<ul>
<li>
<strong>
See Also:
</strong>
</li>
<li>
<em>
Browser Integrations are provided by browser extensions which are contained in their own repositories.
</em>
</li>
<li>
Firefox:
</li>
<li>
<a href="http://git.idk.i2p/idk/I2P-in-Private-Browsing-Mode-Firefox/">
git.idk.i2p/idk/I2P-in-Private-Browsing-Mode-Firefox
</a>
</li>
<li>
<a href="https://i2pgit.org/idk/I2P-in-Private-Browsing-Mode-Firefox/">
i2pgit.org/idk/I2P-in-Private-Browsing-Mode-Firefox
</a>
</li>
<li>
<a href="https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/">
github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox
</a>
</li>
<li>
Chromium:
</li>
<li>
<a href="http://git.idk.i2p/idk/I2P-Configuration-For-Chromium/">
git.idk.i2p/idk/I2P-Configuration-For-Chromium
</a>
</li>
<li>
<a href="https://i2pgit.org/idk/I2P-Configuration-For-Chromium/">
i2pgit.org/idk/I2P-Configuration-For-Chromium
</a>
</li>
<li>
<a href="https://github.com/eyedeekay/I2P-Configuration-For-Chromium/">
github.com/eyedeekay/I2P-Configuration-For-Chromium
</a>
</li>
<li>
<em>
Browser profile management are provided by a freestanding, cross-platform library which is contained in its own repository.
</em>
</li>
<li>
<a href="http://git.idk.i2p/idk/i2p.plugins.firefox">
git.idk.i2p/idk/i2p.plugins.firefox
</a>
</li>
<li>
<a href="https://i2pgit.org/idk/i2p.plugins.firefox">
i2pgit.org/idk/i2p.plugins.firefox
</a>
</li>
<li>
<a href="https://github.com/eyedeekay/i2p.plugins.firefox">
github.com/eyedeekay/i2p.plugins.firefox
</a>
</li>
</ul>
<h2>
Build Methods
</h2>
<ul>
<li>
<code>
[X]
</code>
Cleanly separate jpackage generation phase from NSIS generation phase
</li>
<li>
<code>
[X]
</code>
Enable archive builds for generating Windows
<code>
.exe
</code>
&rsquo;s from Linux hosts
</li>
</ul>
<h2>
Installation Methods
</h2>
<ul>
<li>
<code>
[X]
</code>
NSIS installer
</li>
<li>
<code>
[X]
</code>
Portable, directory-based install
</li>
<li>
<code>
[ ]
</code>
Windows Service Support
</li>
</ul>
<h2>
Update Methods
</h2>
<ul>
<li>
<code>
[X]
</code>
NSIS installer in Default Directory
</li>
<li>
<code>
[X]
</code>
NSIS installer in Portable Directory
</li>
<li>
<code>
[X]
</code>
Handle admin and non-admin updates automatically
</li>
<li>
<code>
[ ]
</code>
Zip-Only portable updater
</li>
</ul>
<h2>
Launcher
</h2>
<ul>
<li>
<code>
[X]
</code>
Detect and handle un-bundled routers on the host system, policy of non-interference
</li>
<li>
<code>
[X]
</code>
Wait for router console to be ready to launch router-console browser
</li>
<li>
<code>
[X]
</code>
Wait for proxy to be ready to launch I2P Web Browser
</li>
<li>
<code>
[X]
</code>
Launch browser instead of router when a repeat-launch is detected
</li>
<li>
<code>
[X]
</code>
GUI component for launching each available component
</li>
<li>
<code>
[X]
</code>
Introduce
<code>
browser.properties
</code>
for customization
</li>
<li>
<code>
[ ]
</code>
Registry-based browser discovery
<a href="http://git.idk.i2p/idk/i2p.plugins.firefox/-/issues/3">
Firefox
</a>
<a href="http://git.idk.i2p/idk/i2p.plugins.firefox/-/issues/4">
Chromium
</a>
</li>
</ul>
<h2>
Browser Configuration All
</h2>
<ul>
<li>
<code>
[X]
</code>
Use identical extensions in Firefox-based and Chromium-based browsers wherever possible
</li>
<li>
<code>
[X]
</code>
Always use a dedicated, I2P Easy-Install specific profile directory
</li>
<li>
<code>
[X]
</code>
Always configure an HTTP Proxy, and safe access to the router console
</li>
<li>
<code>
[X]
</code>
Provide I2P-Specific integrations to the browser UI through WebExtensions
</li>
<li>
<code>
[X]
</code>
Operate in &ldquo;Strict&rdquo; mode where the maximum level of defenses are up
</li>
<li>
<code>
[X]
</code>
Operate in &ldquo;Usability&rdquo; mode where defense is balanced with utility
</li>
<li>
<code>
[X]
</code>
Operate in &ldquo;App&rdquo; mode where we work as a single-purpose window where it is hard to access arbitrary, potentially malicious resources
</li>
<li>
<code>
[X]
</code>
All I2P-Specific profiles should be possible to generate automatically, sight-unseen
</li>
</ul>
<h2>
Browser Configuration Firefox
</h2>
<ul>
<li>
<code>
[X]
</code>
When using Firefox, download extension updates automatically, from AMO, using an outproxy
</li>
<li>
<code>
[X]
</code>
Integrate I2P in Private Browsing for to provide UI for I2P within Firefox
</li>
<li>
<code>
[X]
</code>
Prevent WebRTC proxy escapes by setting mode
<code>
4
</code>
<code>
disable_non_proxied_udp
</code>
or higher
</li>
<li>
<code>
[X]
</code>
Customize panel for Firefox
<code>
App
</code>
mode(Not required for Chromiums)
</li>
</ul>
<h2>
Browser Configuration Chromium
</h2>
<ul>
<li>
<code>
[X]
</code>
When using Chromium, load extensions from source and freeze them without updates to prevent unproxied updating.
</li>
<li>
<code>
[X]
</code>
Integrate
<code>
I2PChrome.js
</code>
to provide UI for I2P within Chrome
</li>
<li>
<code>
[X]
</code>
Prevent WebRTC proxy escapes by setting mode
<code>
4
</code>
<code>
disable_non_proxied_udp
</code>
</li>
</ul>
<h2>
Browser Configuration Strict Mode
</h2>
<ul>
<li>
<code>
[X]
</code>
Disable Javascript by default with NoScript
</li>
<li>
<code>
[X]
</code>
Enforce HTTPS where available with HTTPS Everywhere
<strong>
OR
</strong>
HTTPS only Mode
</li>
<li>
<code>
[ ]
</code>
Proactively enumerate and disable &ldquo;Fine&rdquo; fingerprinting vectors where possible(ongoing)
</li>
<li>
<code>
[ ]
</code>
When running in Tor Browser, look as much like Tor Browser as possible but use an outproxy(ongoing)
</li>
</ul>
<h2>
Browser Configuration Usability Mode
</h2>
<ul>
<li>
<code>
[X]
</code>
Enable Javascript by default but limit it with jShelter
</li>
<li>
<code>
[X]
</code>
Enforce HTTPS where available with HTTPS Everywhere
<strong>
OR
</strong>
HTTPS only Mode
</li>
<li>
<code>
[X]
</code>
Limit attempts to fetch useless junk like advertising with an up-to-date uBlock Origin
</li>
<li>
<code>
[X]
</code>
Limit attempts to reach clearnet CDN&rsquo;s with LocalCDN
</li>
<li>
<code>
[X]
</code>
Isolate
<code>
.onion
</code>
traffic from
<code>
outproxy
</code>
traffic and
<code>
.i2p
</code>
traffic using Onion in Container Tabs
</li>
</ul>
<div id="sourcecode">
<span id="sourcehead">
<strong>
Get the source code:
</strong>
</span>
<ul>
<li>
<a href="https://github.com/eyedeekay/i2p.firefox">
Source Repository: (https://github.com/eyedeekay/i2p.firefox)
</a>
</li>
</ul>
</div>
<div>
<a href="#show">
Show license
</a>
<div id="show">
<div id="hide">
<pre><code>Copyright 2018
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
</code></pre>
<a href="#hide">
Hide license
</a>
</div>
</div>
</div>
</div>
<div>
<iframe src="https://snowflake.torproject.org/embed.html" width="320" height="240" frameborder="0" scrolling="no"></iframe>
</div>
<div>
<a href="https://geti2p.net/">
<img class="i2plogo" src="i2plogo.png"></img>
I2P
</a>
</div>
</body>
</html>

377
docs/PRINCIPLES.html Normal file
View File

@ -0,0 +1,377 @@
<html>
<head>
<title>
I2P Easy-Install...
</title>
<meta name="author" content="eyedeekay" />
<meta name="description" content="i2p.firefox" />
<meta name="keywords" content="master" />
<link rel="stylesheet" type="text/css" href="style.css" />
<link rel="stylesheet" type="text/css" href="showhider.css" />
<link rel="stylesheet" type="text/css" href="darklight.css" />
</head>
<body>
<input type="checkbox" id="checkboxDarkLight">
<div class="container">
<div id="navbar">
<a href="#shownav">
Show navigation
</a>
<div id="shownav">
<div id="hidenav">
<ul>
<li>
<a href="..">
Up one level ^
</a>
</li>
<li>
<a href="index.html">
index
</a>
</li>
<li>
<a href="LICENSE.html">
LICENSE
</a>
</li>
<li>
<a href="index.html">
index.html
</a>
</li>
<li>
<a href="GOALS.html">
GOALS
</a>
</li>
<li>
<a href="PRINCIPLES.html">
PRINCIPLES
</a>
</li>
<li>
<a href="RELEASE.html">
RELEASE
</a>
</li>
<li>
<a href="UPDATES.html">
UPDATES
</a>
</li>
</ul>
<br>
<a href="#hidenav">
Hide Navigation
</a>
</div>
</div>
</div>
<a id="returnhome" href="/">
/
</a>
<h1>
Guidance
</h1>
<p>
This document explains the ideas which are guiding the development of
features specific to the I2P Easy-Install bundle.
</p>
<p>
The general idea is that it is possible, on most platforms, to make I2P
post-install configuration much simpler and much less error-prone. Each
section of this document has guidance for a different &ldquo;Meta-Feature&rdquo; of
the I2P Easy-Install Bundle. For granular, specific information about
goals both achieved and un-achieved see
<code>
[GOALS]
</code>
.
</p>
<ul>
<li>
<strong>
Sections:
</strong>
</li>
</ul>
<ol>
<li>
Guidance for Browser Profile Configuration
</li>
</ol>
<h2>
Guidance for Browser Profile Configuration
</h2>
<ul>
<li>
<strong>
See also:
</strong>
</li>
<li>
<a href="http://git.idk.i2p/idk/i2p.plugins.firefox">
git.idk.i2p/idk/i2p.plugins.firefox
</a>
</li>
<li>
<a href="https://i2pgit.org/idk/i2p.plugins.firefox">
i2pgit.org/idk/i2p.plugins.firefox
</a>
</li>
<li>
<a href="https://github.com/eyedeekay/i2p.plugins.firefox">
github.com/eyedeekay/i2p.plugins.firefox
</a>
</li>
</ul>
<p>
The I2P Easy-Install Bundle for Windows considers basic configuration tasks
&ldquo;Features&rdquo; when they can be automated. The quintessential example of this
is
<strong>
<code>
Browser Profile Configuration
</code>
</strong>
where it injects settings into a
pre-existing browser from the host system. Solving this problem pre-dates
the evolution of
<code>
i2p.firefox
</code>
into a fully-fledged I2P router distribution
and has been the defining goal of this project for its entire existence.
</p>
<p>
However, what good browser profile configuration is, is as complicated as
how to deploy it. I2P has a unique opportunity to decide how it will handle
problems related to browsing in its own context while the network grows
and synthesize a useful number of safe browser configurations while also
reducing existing browser config fragmentation.
</p>
<p>
Easy-Install attempts to limit the number of &ldquo;Coarse Fingerprints&rdquo; which it will
produce by default to a predictable number. A Coarse Fingerprint is basically
a fingerprint &ldquo;That we know we&rsquo;re making&rdquo; by offering the ability to configure
something differently.
</p>
<ul>
<li>
<strong>
That means:
</strong>
</li>
</ul>
<ol>
<li>
It considers the browser integral to the interactive use of the I2P network by a large fraction of users.
</li>
<li>
It considers effective browser configuration
<strong>
impossible for a single user to achieve
</strong>
because effective browser configuration must have the characteristic of being reflected en-masse(anti-fingerprinting measures are only remotely effective when widely used).
</li>
<li>
The browser profile it injects inherits the runtime security characteristics of the
<strong>
host browser
</strong>
.
</li>
<li>
The browser profile it injects obtains runtime privacy characteristics of the
<strong>
easy-install bundle
</strong>
</li>
<li>
The number of coarse browser fingerprint sets is reduced from indeterminately large to
<code>
[supported browsers]*[variant configurations]
</code>
</li>
<li>
It attempts to balance flexibility with privacy, and accommodate people&rsquo;s preferences where possible.
</li>
<li>
It considers browser vendors better at providing browser updates than the I2P Project
</li>
</ol>
<h2>
Browser Configurations and Coarse Fingerprints
</h2>
<p>
At this time it offers configuration for Tor Browser, Firefox, Waterfox, and
LibreWolf for Firefox-based browsers, and Ungoogled-Chromium, Chromium, Brave,
Chrome, and Edgium configuration for Chromium-based browsers. That is a total
of
<strong>
Nine(9)
</strong>
main browsers. There are
<strong>
Two(2)
</strong>
variant configurations,
which correspond to &ldquo;Strict&rdquo; and &ldquo;Usability&rdquo; Modes. That makes a total of
<strong>
Eighteen(18)
</strong>
coarse browser fingerprints produced by this bundle. It also
has the ability to launch in a &ldquo;Restricted to Apps&rdquo; mode where it is only
possible to visit I2P sites using links on the I2P application interface(router
console, hidden services manager) itself.
</p>
<h3>
Strict Mode
</h3>
<p>
This is not on its face as good as having an almost entirely unified browser
fingerprint like Tor Browser attempts to have. It is a simple fact that 18
is greater than one. Every active attempt to gain granularity from a browser
outside of off-the-shelf Fingerprinting techniques is classified as &ldquo;Fine&rdquo;
fingerprinting. It is unpredictable, and harder to defend against, more likely
to exhibit novelty, and more likely to be affected by the host browser&rsquo;s
security. When fingerprinters get this creative disabling Javascript by default
is the most complete defense. This is the primary characteristic of Strict Mode,
it disables Javascript by default with NoScript.
<strong>
Strict Mode is the only
</strong>
<strong>
partial defense against fine-fingerprinting offered by this product.
</strong>
Even
disabling Javascript does not close all fine fingerprinting vectors, but it
does close most of them and reduce attack surface significantly. It is recommended
in combination with Tor Browser, and attempts to be somewhat closer to Tor Browser
than Usability Mode. It is the default mode of operation.
</p>
<h3>
Usability Mode
</h3>
<p>
In contrast to Strict Mode, Usability mode offers the greatest agreeable number
of browser features enabled by default, including a restricted subset of Javascript.
It makes no attempt at all to look like Tor Browser, even when using Tor Browser
as a host browser. It does attempt to optimize the browser for use within I2P, including
specific optimizations to keep traffic in-network or even retrieve information which is
stored on the localhost(while avoiding cache timing attacks). It does this by deploying
an alternative loadout of extensions, including ones which block advertising by default
and which include a cache of CDN resources in local browser storage.
</p>
<h3>
Firefox-Based Browsers
</h3>
<p>
Because of the relatively high configurability of Firefox-based browser
telemetry, Firefox-based browsers are preferred over Chromium-based browsers.
Chromium-based browsers will be used by default
<strong>
only
</strong>
if a Firefox based
browser is unavailable. Only Firefox-variant releases of the Extended Support
Release or of the latest stable release are supportable. If a variant lags
behind Firefox releases, it will be dropped. The primary reason for the default
&ldquo;Ordering&rdquo; of Firefox Profile Selection is the speed at which updates can be
expected to be applied.
</p>
<h3>
Chromium-Based Browsers
</h3>
<p>
Chromium-based browser selection is more subjective and slightly more ad-hoc.
Chromium browsers are chosen based on the variant&rsquo;s stated goals and perceived
efficacy in pursuing those goals. For example, if a Chromium distribution is
focused on removing telemetry or providing anti-fingerprinting, it is chosen
before a Chromium that is provided by Google or integrated tightly with the
host OS. This is a matter of judgement on my part and if you disagree you should
open an issue and argue with me. I&rsquo;m not infallible, I&rsquo;ll listen.
</p>
<h3>
All other browsers
</h3>
<p>
With all other browsers attempts at anti-fingerprinting are a moot point. It offers
limited configuration options using widely-supported generic browser configuration
means. If it doesn&rsquo;t recognize a Firefox or Chromium browser on the host, then it
sets the common proxy environment variables
<code>
http_proxy
</code>
<code>
https_proxy
</code>
<code>
ALL_PROXY
</code>
and
<code>
NO_PROXY
</code>
to their appropriate values before launching the browser configuration
and attempts to set a directory for the runtime configuration(Profile) by changing
to the profile directory.
</p>
<div id="sourcecode">
<span id="sourcehead">
<strong>
Get the source code:
</strong>
</span>
<ul>
<li>
<a href="https://github.com/eyedeekay/i2p.firefox">
Source Repository: (https://github.com/eyedeekay/i2p.firefox)
</a>
</li>
</ul>
</div>
<div>
<a href="#show">
Show license
</a>
<div id="show">
<div id="hide">
<pre><code>Copyright 2018
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
</code></pre>
<a href="#hide">
Hide license
</a>
</div>
</div>
</div>
</div>
<div>
<iframe src="https://snowflake.torproject.org/embed.html" width="320" height="240" frameborder="0" scrolling="no"></iframe>
</div>
<div>
<a href="https://geti2p.net/">
<img class="i2plogo" src="i2plogo.png"></img>
I2P
</a>
</div>
</body>
</html>

221
docs/RELEASE.html Normal file
View File

@ -0,0 +1,221 @@
<html>
<head>
<title>
I2P Easy-Install...
</title>
<meta name="author" content="eyedeekay" />
<meta name="description" content="i2p.firefox" />
<meta name="keywords" content="master" />
<link rel="stylesheet" type="text/css" href="style.css" />
<link rel="stylesheet" type="text/css" href="showhider.css" />
<link rel="stylesheet" type="text/css" href="darklight.css" />
</head>
<body>
<input type="checkbox" id="checkboxDarkLight">
<div class="container">
<div id="navbar">
<a href="#shownav">
Show navigation
</a>
<div id="shownav">
<div id="hidenav">
<ul>
<li>
<a href="..">
Up one level ^
</a>
</li>
<li>
<a href="index.html">
index
</a>
</li>
<li>
<a href="LICENSE.html">
LICENSE
</a>
</li>
<li>
<a href="index.html">
index.html
</a>
</li>
<li>
<a href="GOALS.html">
GOALS
</a>
</li>
<li>
<a href="PRINCIPLES.html">
PRINCIPLES
</a>
</li>
<li>
<a href="RELEASE.html">
RELEASE
</a>
</li>
<li>
<a href="UPDATES.html">
UPDATES
</a>
</li>
</ul>
<br>
<a href="#hidenav">
Hide Navigation
</a>
</div>
</div>
</div>
<a id="returnhome" href="/">
/
</a>
<h1>
I2P Easy-Install Bundle for Windows 2.4.9
</h1>
<p>
This is a pre-release of the I2P Easy-Install Bundle for Windows.
This changes how the I2P bundle and browser profile manager are installed and integrated with the host system.
The Easy-Install bundle is now a &ldquo;portable&rdquo; system that can be moved to different locations within or between Windows file-systems while retaining all built-in functionality.
A shortcut for starting the I2P router is still provided by the installer for convenience, but the shortcuts for starting the I2P Browser are now integrated with the I2P desktop UI.
</p>
<p>
The browser profile manager itself has been split away from the monolithic I2P router+Java/jpackage, and moved into an I2P plugin managed by the router.
While this was done primarily to reduce how complex the existing code was, this also results in behavior which is closer to the main distribution of I2P for Windows and will lead to a more flexible installer, which can bundle additional default plugins and may be suitable for installation as a Windows service.
I2P Plugins can also be updated independently of the router that hosts them, so it will be possible to update the browser profile manager independently of the router itself.
It also means that the browser profile manager can be un-installed by uninstalling the plugin, and much more importantly that the browser profile manager is now compatible with all Java I2P distributions.
</p>
<p>
<strong>
Why a dev build 3 weeks before the release?
</strong>
</p>
<p>
By further delineating the components of the bundle, these changes also affected how the release process happens.
In particular the build process of each component has been encapsulated in a CI description which can be reproduced on a local PC.
This simplifies and automates the build process by ensuring that up-to-date build tools are installed in a brand-new container for every build.
In effect this should speed up the release process for I2P Easy-Install for Windows considerably.
This release is a test-run of the new process, so I can document what is going on.
It breaks down roughly like this:
</p>
<ul>
<li>
It takes ~22 minutes to compile all the targets for the
<code>
i2p.plugins.firefox
</code>
and make the resulting artifacts available. During this process, I must insert 1 HSM and enter 1 password. (This part used to be about 30 steps, now it takes 1)
</li>
<li>
It takes ~22 minutes to compile all the targets for the
<code>
i2p.firefox
</code>
project and make the resulting artifacts available. This process produces only unsigned artifacts identified by their hashes, and is non-interactive. (This part used to be around 60 steps the first time, and 40 steps each additional time)
</li>
<li>
<code>
i2p.firefox
</code>
updates are signed in their
<code>
.su3
</code>
form. The
<code>
NSIS
</code>
-powered
<code>
.exe
</code>
installer is the current updater. The next step is to sign
<em>
just this installer
</em>
and generate a torrent of the result. (This process used to depend on the previous build process and couldn&rsquo;t be done independently. Now it takes about 30 seconds)
</li>
<li>
Generate and sign a newsfeed to notify the users of an update. This process is the only process that is
<strong>
slower
</strong>
when containerized, because there are dozens of feeds to be signed in their respective containers. It takes about an hour.
</li>
</ul>
<p>
For you the end user, nothing much should change.
You&rsquo;ll get your updates a lot faster, and have more options available for testing.
The same installer is used for the updater, and the process is handled the same way.
However for developers, testers, and maintainers, this release will result in big changes for the better.
</p>
<p>
This release still embeds a
<code>
2.4.0
</code>
Java I2P router. No changes have been made to update the embedded router.
Network behavior will be unchanged until the official
<code>
2.5.0
</code>
release.
</p>
<div id="sourcecode">
<span id="sourcehead">
<strong>
Get the source code:
</strong>
</span>
<ul>
<li>
<a href="https://github.com/eyedeekay/i2p.firefox">
Source Repository: (https://github.com/eyedeekay/i2p.firefox)
</a>
</li>
</ul>
</div>
<div>
<a href="#show">
Show license
</a>
<div id="show">
<div id="hide">
<pre><code>Copyright 2018
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
</code></pre>
<a href="#hide">
Hide license
</a>
</div>
</div>
</div>
</div>
<div>
<iframe src="https://snowflake.torproject.org/embed.html" width="320" height="240" frameborder="0" scrolling="no"></iframe>
</div>
<div>
<a href="https://geti2p.net/">
<img class="i2plogo" src="i2plogo.png"></img>
I2P
</a>
</div>
</body>
</html>

View File

@ -8,127 +8,142 @@
<meta name="keywords" content="master" /> <meta name="keywords" content="master" />
<link rel="stylesheet" type="text/css" href="style.css" /> <link rel="stylesheet" type="text/css" href="style.css" />
<link rel="stylesheet" type="text/css" href="showhider.css" /> <link rel="stylesheet" type="text/css" href="showhider.css" />
<link rel="stylesheet" type="text/css" href="darklight.css" />
</head> </head>
<body> <body>
<div id="navbar"> <input type="checkbox" id="checkboxDarkLight">
<a href="#shownav"> <div class="container">
Show navigation <div id="navbar">
</a> <a href="#shownav">
<div id="shownav"> Show navigation
<div id="hidenav"> </a>
<ul> <div id="shownav">
<li> <div id="hidenav">
<a href=".."> <ul>
Up one level ^ <li>
</a> <a href="..">
</li> Up one level ^
<li> </a>
<a href="index.html"> </li>
index <li>
</a> <a href="index.html">
</li> index
<li> </a>
<a href="LICENSE.html"> </li>
LICENSE <li>
</a> <a href="LICENSE.html">
</li> LICENSE
<li> </a>
<a href="UPDATES.html"> </li>
UPDATES <li>
</a> <a href="index.html">
</li> index.html
</ul> </a>
<br> </li>
<a href="#hidenav"> <li>
Hide Navigation <a href="GOALS.html">
</a> GOALS
</a>
</li>
<li>
<a href="PRINCIPLES.html">
PRINCIPLES
</a>
</li>
<li>
<a href="RELEASE.html">
RELEASE
</a>
</li>
<li>
<a href="UPDATES.html">
UPDATES
</a>
</li>
</ul>
<br>
<a href="#hidenav">
Hide Navigation
</a>
</div>
</div> </div>
</div> </div>
</div> <a id="returnhome" href="/">
<a id="returnhome" href="/"> /
/
</a>
<h1>
Setting up an Update Server for an I2P Bundle
</h1>
<p>
It is important to set up a signed update server so that people are able to
safely and anonymously update your I2P bundle.
</p>
<h2>
The quick way:
</h2>
<p>
This process depends on my ability to push releases to github. If you are
forking, setting up a dev server, or taking over because I got hit by a bus,
you&rsquo;ll need to do it the complete way.
</p>
<p>
For as long as I am building updates, you will be able to mirror the jpackaged
Windows bundle by cloning the repository
<code>
https://github.com/eyedeekay/i2p
</code>
and
running the
<code>
make docker run
</code>
target in that repository. You can retrieve the
base32 address of your update server by viewing the log with
<code>
docker logs eephttpd-jpackage | grep b32.i2p | tee eephttpd-address.md
</code>
. To
update the site, run
<code>
./update.site.sh
</code>
in that repository.
</p>
<p>
Once you have cloned the repository and started the container with
<code>
make docker run
</code>
, you can simply add
<code>
path/to/repo/update-site.sh
</code>
to your
<code>
crontab
</code>
and it will update at an interval of your choosing.
</p>
<h2>
The complete way:
</h2>
<p>
TODO: describe how to do it with less of the awesome fancy stuff I put together
to make it easier on myself to keep an update server going.
</p>
<div id="sourcecode">
<span id="sourcehead">
<strong>
Get the source code:
</strong>
</span>
<ul>
<li>
<a href="https://github.com/eyedeekay/i2p.firefox">
Source Repository: (https://github.com/eyedeekay/i2p.firefox)
</a>
</li>
</ul>
</div>
<div>
<a href="#show">
Show license
</a> </a>
<div id="show"> <h1>
<div id="hide"> Setting up an Update Server for an I2P Bundle
<pre><code>Copyright 2018 </h1>
<p>
It is important to set up a signed update server so that people are able to
safely and anonymously update your I2P bundle. There are two sort of &ldquo;Levels&rdquo;
to what you might do to provide updates to your users. Each of them requires the
generation of a
<a href="https://eyedeekay.github.io/Hopefully-Holistic-Guide-to-I2P-Dev-Build-Update-Hosting/">
signed newsfeed
</a>
,
which also serves as a way to provide information to your users about updates,
features, and security events.
</p>
<p>
This project,
<code>
i2p.firefox
</code>
a.k.a. the &ldquo;I2P Easy Install Bundle&rdquo; uses the &ldquo;Executable&rdquo;
update subtype, meaning that it capable of installing itself by executing code as the
user who runs the update, which is usually the main user of a Windows 10 or 11 PC.
This update subtype is highly flexible, but requires the creation of a &ldquo;Scripted&rdquo; using
something like
<code>
NSIS
</code>
,
<code>
wixl
</code>
, or custom code. Other update types include ZIP (used by
the core I2P product) and DMG(used by Mac OSX).
</p>
<h1>
Static HTTP Update URL over I2P
</h1>
<h1>
Bittorrent Update URL over I2P
</h1>
<p>
<a href="https://github.com/i2p/i2p.plugins.zzzot">
If you choose to do this, consider using zzzot to host your open tracker instead of a normal site
</a>
,
which you can obtain from
<a href="http://stats.i2p/i2p/plugins/zzzot.su3">
this I2P link
</a>
.
</p>
<div id="sourcecode">
<span id="sourcehead">
<strong>
Get the source code:
</strong>
</span>
<ul>
<li>
<a href="https://github.com/eyedeekay/i2p.firefox">
Source Repository: (https://github.com/eyedeekay/i2p.firefox)
</a>
</li>
</ul>
</div>
<div>
<a href="#show">
Show license
</a>
<div id="show">
<div id="hide">
<pre><code>Copyright 2018
Permission is hereby granted, free of charge, to any person obtaining a copy of Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in this software and associated documentation files (the "Software"), to deal in
@ -147,9 +162,10 @@ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
</code></pre> </code></pre>
<a href="#hide"> <a href="#hide">
Hide license Hide license
</a> </a>
</div>
</div> </div>
</div> </div>
</div> </div>
@ -158,7 +174,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
</div> </div>
<div> <div>
<a href="https://geti2p.net/"> <a href="https://geti2p.net/">
<img src="i2plogo.png"></img> <img class="i2plogo" src="i2plogo.png"></img>
I2P I2P
</a> </a>
</div> </div>

24
docs/darklight.css Normal file
View File

@ -0,0 +1,24 @@
/* edgar darklight CSS file */
#checkboxDarkLight:checked + .container {
background-color: #202020;
filter: invert(100%);
}
#checkboxDarkLight{
appearance: none;
width: 80px;
height: 40px;
background: black;
border-radius: 22px;
cursor: pointer;
outline: none;
}
#checkboxDarkLight::before{
content: '';
width: 40px;
height: 35px;
background-color:white;
border-radius: 35px;
cursor: pointer;
transition: .3s linear;
}

BIN
docs/i2plogo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

15
docs/showhider.css Normal file
View File

@ -0,0 +1,15 @@
/* edgar showhider CSS file */
#show {display:none; }
#hide {display:block; }
#show:target {display: block; }
#hide:target {display: none; }
#shownav {display:none; }
#hidenav {display:block; }
#shownav:target {display: block; }
#hidenav:target {display: none; }
#donate {display:none; }
#hidedonate {display:block; }
#donate:target {display: block; }
#hidedonate:target {display: none; }

163
docs/style.css Normal file
View File

@ -0,0 +1,163 @@
/* edgar default CSS file */
body {
font-family: "Roboto";
font-family: monospace;
text-align: justify;
background-color: #373636;
color: whitesmoke;
font-size: 1.15em;
}
ul {
width: 55%;
display: block;
}
ol {
width: 55%;
display: block;
}
li {
margin-top: 1%;
}
p {
max-width: 90%;
margin-top: 1%;
margin-left: 3%;
margin-right: 3%;
}
img {
float: left;
top: 5%;
left: 5%;
max-width: 60%;
display: inline;
padding-right: 2%;
}
.inline {
display: inline;
}
.link-button:focus {
outline: none;
}
.link-button:active {
color: red;
}
code {
font-family: monospace;
border-radius: 5%;
padding: 1%;
border-color: darkgray;
font-size: .9em;
}
a {
color: #C6D9FE;
padding: 1%;
}
ul li {
color: #C6D9FE;
}
iframe {
background: aliceblue;
border-radius: 15%;
margin: 2%;
}
.container {
display: inline-block;
margin: 0;
padding: 0;
}
.editor-toolbar a {
display: inline-block;
text-align: center;
text-decoration: none !important;
color: whitesmoke !important;
}
#feed {
width: 60vw;
height: unset !important;
margin: 0;
padding: 0;
float: right;
background-color: #373636;
color: whitesmoke;
border: #C6D9FE solid 1px;
}
.thread-post,
.thread {
color: whitesmoke !important;
background-color: #373636;
border: 1px solid darkgray;
font-size: inherit;
padding-top: 1%;
padding-bottom: 1%;
}
.thread-post {
margin-left: 4%;
}
input {
text-align: center;
color: whitesmoke !important;
background-color: #373636;
border: 1px solid darkgray;
font: normal normal normal 14px/1 FontAwesome;
font-size: inherit;
padding-top: 1%;
padding-bottom: 1%;
}
.thread-hash {
text-align: right;
color: whitesmoke !important;
background-color: #373636;
border: 1px solid darkgray;
font-size: inherit;
padding-top: 1%;
padding-bottom: 1%;
}
.post-body {
text-align: left;
color: whitesmoke !important;
font-size: inherit;
padding-top: 1%;
padding-bottom: 1%;
}
#show {display:none; }
#hide {display:block; }
#show:target {display: block; }
#hide:target {display: none; }
#shownav {display:none; }
#hidenav {display:block; }
#shownav:target {display: block; }
#hidenav:target {display: none; }
#navbar {
float: right;
width: 15%;
}
#returnhome {
font-size: xxx-large;
display: inline;
}
h1 {
display: inline;
}

1355
index.html

File diff suppressed because it is too large Load Diff

View File

@ -36,6 +36,7 @@ img {
left: 5%; left: 5%;
max-width: 60%; max-width: 60%;
display: inline; display: inline;
padding-right: 2%;
} }
.inline { .inline {
@ -74,8 +75,6 @@ iframe {
} }
.container { .container {
width: 36vw;
height: 64vh;
display: inline-block; display: inline-block;
margin: 0; margin: 0;
padding: 0; padding: 0;