Changeset - 447435fa7bff
.hgignore
Show inline comments
 
@@ -7,12 +7,16 @@ syntax: glob
 
*.un~
 
Session.vim
 
.netrwhist
 
log/*
 
vnstats/*
 

	
 
docs/build/*
 
test/*
 

	
 
run.py
 
*.csv
 
*.json
 
*.orig
 

	
 
Ennstatus.egg-info/*
 
doc/*
ennstatus/api/views.py
Show inline comments
 
@@ -3,34 +3,36 @@ import json
 

	
 
from datetime import datetime
 

	
 
from flask import (Blueprint, request, current_app, jsonify, render_template,
 
                   abort)
 

	
 
from werkzeug.exceptions import BadRequest
 

	
 
import strict_rfc3339
 
import pygeoip
 
import requests
 

	
 
from ennstatus import csrf
 
from ennstatus.status.functions import (single_server, all_servers,
 
                                        all_servers_by_type)
 
from .model import Server
 
from .auth import httpauth
 

	
 
api_page = Blueprint('api', __name__)
 
gi4 = pygeoip.GeoIP('/usr/share/GeoIP/GeoIP.dat', pygeoip.MEMORY_CACHE)
 
gi6 = pygeoip.GeoIP('/usr/share/GeoIP/GeoIPv6.dat', pygeoip.MEMORY_CACHE)
 

	
 

	
 
@csrf.exempt
 
@api_page.route('/update', methods=('POST',))
 
@httpauth.login_required
 
def update():
 

	
 
    current_app.logger.info('Handling update')
 

	
 
    try:
 
        servers = current_app.config['ENNSTATUS_SERVERS']
 
    except KeyError as e:
 
        current_app.logger.error(str(e))
 
        return abort(500)
 

	
ennstatus/root/functions.py
Show inline comments
 
@@ -35,25 +35,25 @@ def send_membership_mail(form):
 
                        current_app.extensions['gnupg'].encrypt(
 
                            body,
 
                            recipient,
 
                            always_trust=True
 
                        )
 
                    )
 
                else:
 
                    encrypted_body = None
 
                current_app.logger.debug('After encryption')
 
                current_app.logger.debug(body)
 
                msg.body = encrypted_body if encrypted_body else body
 
                conn.send(msg)
 
        flash('Application successfully sended!', 'success')
 
        flash('Application successfully submitted!', 'success')
 
    except KeyError:
 
        flash(
 
            'Internal server error! Please get in touch with us at info@enn.lu!',
 
            'error'
 
        )
 
        current_app.logger.error('Membership admin not found!')
 
    except AssertionError:
 
        pass
 
    except Exception as e:
 
        flash(
 
            'Internal server error! Please get in touch with us at info@enn.lu!',
 
            'error'
 
@@ -83,25 +83,25 @@ def send_bridgeprogram_mail(form):
 
                    encrypted_body = str(
 
                        current_app.extensions['gnupg'].encrypt(
 
                            body,
 
                            recipient,
 
                            always_trust=True
 
                        )
 
                    )
 
                else:
 
                    encrypted_body = None
 
                msg.body = encrypted_body if encrypted_body else body
 
                conn.send(msg)
 
        flash(
 
            'Application successfully sended! We will send you an email with further information!',
 
            'Application successfully submitted! We will send you an email with further information!',
 
            'success'
 
        )
 
    except KeyError:
 
        flash(
 
            'Internal server error! Please get in touch with us at info@enn.lu',
 
            'error'
 
        )
 
        current_app.logger.error('Bridgeprogram admin not found!')
 
    except AssertionError:
 
        pass
 
    except Exception as e:
 
        flash(
ennstatus/root/views.py
Show inline comments
 
@@ -10,29 +10,24 @@ root_page = Blueprint('root', __name__)
 

	
 

	
 
@root_page.route('/')
 
def index():
 
    return render_template('root/index.html')
 

	
 

	
 
@root_page.route('/about')
 
def about():
 
    return render_template('root/about.html')
 

	
 

	
 
@root_page.route('/services')
 
def services():
 
    return render_template('root/services.html')
 

	
 

	
 
@root_page.route('/partners')
 
def partners():
 
    return render_template('root/partners.html')
 

	
 

	
 
@root_page.route('/bridgeprogram', methods=('GET', 'POST'))
 
def bridgeprogram():
 

	
 
    current_app.logger.info('Handling bridgeprogram')
 
    form = BridgeprogramForm()
 

	
 
    if request.method == 'POST':
ennstatus/static/css/ennstatus.css
Show inline comments
 
@@ -53,25 +53,24 @@ h1, h2, h3, h4 {
 
   color: #fff;
 
}
 

	
 
.dropdown-menu .divider {
 
    background-color: #00bf1a;
 
}
 

	
 
a, a:hover, a:active, a:visited {
 
    color: #af24cb;
 
}
 

	
 

	
 

	
 
/* Multi level dropdown menu http://bootsnipp.com/snippets/featured/multi-level-dropdown-menu-bs3 */
 

	
 
.dropdown-submenu {
 
    position: relative;
 
}
 

	
 
.dropdown-submenu > .dropdown-menu {
 
    top: 0;
 
    left: 100%;
 
    margin-top: -6px;
 
    margin-left: -1px;
 
    -webkit-border-radius: 0 6px 6px 6px;
 
@@ -157,12 +156,46 @@ a, a:hover, a:active, a:visited {
 

	
 
.form-group input[type="radio"]:checked + .btn-group > label span:first-child {
 
    display: inline-block;
 
}
 

	
 
.form-group input[type="radio"]:checked + .btn-group > label span:last-child {
 
    display: none;
 
}
 

	
 
.checkbox label, .radio label {
 
    padding-left: 12px;
 
}
 

	
 
.btn {
 
    margin-top: 5px;
 
    margin-bottom: 5px;
 
}
 

	
 
.highlighted-label {
 
    font-size: 24px;
 
    margin-bottom: 10px;
 
    font-weight: 500;
 
    line-height: 1.1;
 
    box-sizing: border-box;
 
    display: inline-block;
 
}
 

	
 
.highlighted-label-big {
 
    font-size: 30px;
 
    margin-bottom: 10px;
 
    font-weight: 500;
 
    line-height: 1.1;
 
    box-sizing: border-box;
 
    display: inline-block;
 

	
 
}
 

	
 
.btn-enn {
 
    color: #fff;
 
    background-color: #00ae18;
 
    border-color: #009414;
 
}
 

	
 
footer {
 
    margin-bottom: 20px;
 
}
ennstatus/status/views.py
Show inline comments
 
@@ -31,17 +31,12 @@ def relay():
 

	
 
@status_page.route('/bridge')
 
def bridge():
 
    servers = list(all_servers_by_type('bridge'))
 
    return render_template('status/index.html', bridge=servers)
 

	
 

	
 
@status_page.route('/single/<server_name>')
 
def single(server_name):
 
    server = single_server(server_name.lower())
 
    kwargs = {server['server_type'].lower(): [server]}
 
    return render_template('status/index.html', **kwargs)
 

	
 

	
 
@status_page.route('/about')
 
def about():
 
    return render_template('status/about.html')
ennstatus/templates/base.html
Show inline comments
 
@@ -108,27 +108,31 @@
 
  {% with messages = get_flashed_messages(with_categories=True) %}
 
    {% if messages %}
 
      <div class="col-md-12">
 
        {% for category, message in messages %}
 
          {{ base_macros.display_error(category, message) }}
 
        {% endfor %}
 
      </div>
 
    {% endif %}
 
  {% endwith %}
 
  {% block content %}
 
  {% endblock %}
 
  </div>
 
  <footer>
 
  <footer class="col-md-12">
 
    <hr style="margin-bottom: 0.5%;">
 
    <div class="col-md-12 text-center">
 
      <a class="pull-left" href="https://twitter.com/FrennVunDerEnn" target="blank">@FrennVunDerEnn</a>
 
      <address><strong>Frënn vun der Enn a.s.b.l.</strong>  <em>(R.C.S. Luxembourg F 9.478)</em>
 
      <a class="pull-right" rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/deed.en_US" target="blank">CC-BY-NC-SA</a></address>
 
    <div class="text-center clearfix">
 
      <div class="pull-left">
 
        <a href="https://twitter.com/FrennVunDerEnn" target="blank">@FrennVunDerEnn</a>
 
      </div>
 
      <strong>Frënn vun der Enn a.s.b.l.</strong>  <em>(R.C.S. Luxembourg F 9.478)</em>
 
      <div class="pull-right">
 
        <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/deed.en_US" target="blank">CC-BY-NC-SA</a>
 
      </div>
 
    </div>
 
  </footer>
 
</div>
 

	
 
{% block scripts %}
 
  {{ super() }}
 
{% endblock %}
 

	
 
{% endblock %}
ennstatus/templates/donate/index.html
Show inline comments
 
@@ -14,34 +14,36 @@
 
    .bitpay-donate-field {clear:both;}
 
    .bitpay-donate-field label {float:left;width:100px;}
 
    .bitpay-donate-field div {float:left;}
 
    .bitpay-donate-field-email {width:80%;}
 
    .bitpay-donate-field-price {width:40%;}
 
    .bitpay-donate-field-currency {width:40%;}
 
    .bitpay-donate-button-wrapper {clear:both;margin:auto;text-align:center;}
 
    input.bitpay-donate-error {border:2px solid red;}
 
  </style>
 
{% endblock %}
 

	
 
{% block content %}
 
  <div class="col-md-4 text-center">
 
    <img src="{{ url_for('static', filename='images/Support.png') }}" class="img-rounded" alt="WhoIs" width="160"></img>
 
  <div class="col-md-4">
 
    <img src="{{ url_for('static', filename='images/Support.png') }}" class="img-responsive img-rounded center-block" alt="WhoIs" width="160"></img>
 
    <div class="text-center">
 
    <h2>Support us!</h2>
 
  </div>
 
  </div>
 
  <div class="col-md-8">
 
    <div class="jumbotron">
 
      <h2>Take action for a <strong>#FreeInternet</strong>! Support us today!</h2>
 
      <p>As a non-profit organization we are 100% community funded. Donations from our members and supporters will be used to <strong>power Tor nodes</strong>, <strong>print flyers and posters</strong> or cover administrative charges.</p>
 
      <h3><a href="{{ url_for('donate.received') }}"><span class="label label-info">Donation history</span></a>
 
      <a href="{{ url_for('root.bridgeprogram') }}"><span class="label label-primary">Adopt a Tor Bridge</span></a></h3>
 
      <span class='highlighted-label'><a href="{{ url_for('donate.received') }}"><span class="label label-info">Donation history</span></a></span>
 
      <span class='highlighted-label'><a href="{{ url_for('root.bridgeprogram') }}"><span class="label label-primary">Adopt a Tor Bridge</span></a></span>
 
    </div>
 
  </div>
 
  <div class="col-md-12">
 
    <div class="col-md-4">
 
      <div class="thumbnail">
 
        <center>
 
          <h3>Wire Transfer </h3>
 
        </center>
 
        <div class="well well-sm">
 
          <p>
 
            <strong>Account holder:</strong> Frënn vun der Ënn A.S.B.L.<br>
 
            <strong>BIC/SWIFT:</strong> BCEELULL<br>
 
@@ -49,52 +51,51 @@
 
          </p>
 
       </div>
 
       <div class="well well-sm">
 
       <p>
 
         <strong>Account holder:</strong> Chaos Computer Club Lëtzebuerg A.S.B.L.<br>
 
         <strong>BIC/SWIFT:</strong> BCEELULL<br>
 
         <strong>IBAN:</strong> LU29 0019 2855 3890 4000<br>
 
         <strong>Subject:</strong> * to FVDE<br>
 
       </p>
 
       </div>
 
      </div>
 
    </div>
 
    <div class="col-md-4">
 
    <div class="col-md-4 clearfix">
 
      <div class="thumbnail">
 
        <center>
 
          <h3>SnailMail</h3>
 
        </center>
 
        <div class="well well-sm">
 
          <div class="pull-right">
 
            <form class="form-inline" role="form" method="POST" action"{{ url_for('donate.index') }}">
 
              {{ form.hidden_tag() }}
 
              <div class="form-group">
 
                {{ form.country(_class="form-class") }}
 
                {{ form.country(class_='form-control input-sm', onchange='this.form.submit()') }}
 
                <noscript><input type="submit" class="btn btn-enn btn-sm" value="Submit"></noscript>
 
              </div>
 
              <input type="submit" class="btn btn-primary btn-sm" value="Submit">
 
            </form>
 
          </div>
 
          <div class="clearfix"></div>
 
          <address>
 
            <strong>Frënn vun der Ënn, ASBL</strong><br>
 
                    BPM 381892<br>
 
                    {{ address['address'] }}<br>
 
                    {{ address['postal_code'] }}, {{ address['city'] }}<br>
 
                    {{ address['country'] }}
 
          </address>
 
        </div>
 
      </div>
 
    </div>
 
    <div class="col-md-4">
 
      <div>
 
      <div class="thumbnail">
 
        <center>
 
          <h3>Bitcoin</h3>
 
        </center>
 
        <div class="well well-sm">
 
          <p>
 
            <strong>Bitcoin Address:</strong> 1EYZCq2ZL6chWXYYkJoDo7fz39UC7do5cC
 
          </p>
 
        </div>
 
        <form class="bitpay-donate form-horizontal" action="https://bitpay.com/checkout" method="POST" onsubmit="return checkRequiredFields(this);">
 
          <input name="action" type="hidden" value="checkout">
 
          <div class="form-group">
 
            <label class="col-sm-2 control-label">Email:</label>
ennstatus/templates/donate/received.html
Show inline comments
 
{% extends "base.html" %}
 
{% import "donate/macros.html" as macros %}
 

	
 
{% set title = "Donate - Received donations" %}
 

	
 
{% block content %}
 
  <div class="col-md-12">
 
    <h2>Received Donations</h2>
 
  </div>
 
  <div class="col-md-12 clearfix">
 
    <div class="pull-left">
 
      {% if csv_file %}
 
        <h3>{{ '-'.join([year, month]) }}</h3>
 
      {% else %}
 
        <h3>Error!</h3>
 
      {% endif %}
 
    </div>
 
    <div class="pull-right">
 
      <form class="form-inline" role="form" method="POST" action="/donate/received">
 
        {{ form.hidden_tag() }}
 
        <div class="form-group">
 
          {{ form.year.label }}
 
          {{ form.year(_class="form-control") }}
 
          {{ form.year(class_='form-control input-sm') }}
 
          {{ form.month.label }}
 
          {{ form.month(_class="form-control") }}
 
          {{ form.month(class_='form-control input-sm') }}
 
          <input type="submit" class="btn btn-enn btn-sm" value="Submit">
 
        </div>
 
        <input type="submit" class="btn btn-primary btn-sm" value="Submit">
 
      </form> 
 
    </div>
 
  </div>
 
  <div class="clearfix"></div>
 
  <div class="col-md-12">
 
    {% if csv_file %}
 
      {{ macros.create_donations_table(csv_file) }}
 
    {% else %}
 
      {% if year and month %}
 
        <p>No donations found for {{ '-'.join([year, month]) }}!</p>
 
      {% else %}
 
        <p>No donations found!</p>
 
      {% endif %}
 
    {% endif %}
 
  </div>
 
{% endblock %}
ennstatus/templates/root/about.html
Show inline comments
 
{% extends "base.html" %}
 

	
 
{% set title = "Who we are" %}
 

	
 
{% block content %}
 
    <!--
 
    <div class="col-md-4 text-center">
 
      <img class="img-rounded" alt="WhoIs" src="{{ url_for('static', filename='images/WhoIs.png') }}" width="160" height="189"></img>
 
      <h3>Who we are</h3>
 
      </div> -->
 

	
 
  <div class="col-md-offset-1 col-md-11">
 
    <h2>Who we are</h2>
 
    <h3>Organization</h3>
 
    <p class="lead">
 
      <i>Frënn vun der Ënn a.s.b.l.</i> is a non-profit organization based in Luxembourg (EU).
 
      It has been founded by members of <i>Chaos Computer Club Lëtzebuerg a.s.b.l.</i> in 2013.
 
    </p>
 
    <p>
 
      As defined in the statutes (see below), the goals of our organization are:
 
      <ul>
 
        <li>defending civil rights, especially on the internet</li>
 
        <li>defending the right to anonymity on the internet by supporting Tor Project Inc.</li>
ennstatus/templates/root/abuse.html
Show inline comments
 
{% extends "base.html" %}
 

	
 
{% set title = "Abuse" %}
 

	
 
{% block content %}
 
  <!-- <div class="col-md-4 text-center">
 
    <img src="{{ url_for('static', filename='images/Abuse.png') }}" class="img-rounded" alt="FVDE_Logo_LQ" width="160"></img>
 
    <h2>Report Abuse!</h2>
 
  </div> -->
 
  <div class="col-md-offset-1 col-md-11">
 
    <h2>Abuse handling</h2>
 
    <p class="lead">We take our mission very seriously and carefully examine abuse cases.</p>
 
    <p>If you have any question regarding abusive traffic emanating from one of our Tor Exit nodes, don't hesitate to contact our abuse departement. Please make sure to include the following details in your enquiry:</p>
 
    <ul>
 
      <li>the offending IP address'</li>
 
      <li>the type &amp; address' of the abused service(s)</li>
 
      <li>your contact information</li>
 
    </ul><br>
 
    <p>
 
    For transparency reasons we publish monthly <a href="//{{ wiki_url }}/doku.php?id=abuse_statistics" target="blank"><strong>abuse mail statistics</strong></a>.
 
    </p>
ennstatus/templates/root/bridgeprogram.html
Show inline comments
 
@@ -66,24 +66,24 @@
 
        {% endfor %}
 
        </div>
 
        {% if form.payment.errors %}
 
          <div class="col-lg-offset-2 col-lg-10">
 
            {% for error in form.payment.errors %}
 
              <p class="help-block">{{ error }}</p>
 
            {% endfor %}
 
          </div>
 
        {% endif %}
 
      </div>
 
      <div class="form-group">
 
        <div class="col-lg-offset-2 col-lg-10">
 
          {{ form.submit(class_='btn btn-primary') }}
 
          {{ form.submit(class_='btn btn-enn') }}
 
        </div>
 
      </div>
 
    </form>
 
  </div>
 
  <div class="col-md-4">
 
    <h3>More information</h3>
 
    <p>You want to know more about our work?</p>
 
    <p>Our <a href="//wiki.enn.lu/doku.php?id=user:kahpa">bridge operator</a> will give you further information about the project.</p>
 
    <p><strong>Get in touch:</strong> <abbr title="E-Mail"><span class="glyphicon glyphicon-envelope"></span></abbr> : <a href="mailto:bridges@enn.lu">bridges@enn.lu</a> <span class="glyphicon glyphicon-lock"></span> GPG: <a href="http://keyserver.cypherpunk.lu:11371/pks/lookup?op=get&search=0x3F917F479C5D0F3B">0x9C5D0F3B</a></p>
 
  </div>
 
{% endblock %}
ennstatus/templates/root/contact.html
Show inline comments
 
{% extends "base.html" %}
 

	
 
{% set title = "Contact" %}
 

	
 
{% block content %}
 
  <div class="col-md-4 text-center">
 
    <img src="{{ url_for('static', filename='images/Contact.png') }}" class="img-rounded" alt="WhoIs" width="160"></img>
 
  <div class="col-md-4">
 
    <img src="{{ url_for('static', filename='images/Contact.png') }}" class="img-responsive img-rounded center-block" alt="WhoIs" width="160"></img>
 
    <div class="text-center">
 
    <h2>Contact</h2>
 
  </div>
 
  <div class="col-md-8">
 
    <h2>General</h2>
 
  </div>
 
  <div class="col-md-8 clearfix">
 
    <h2 class="pull-left">General</h2>
 
    <div class="pull-right">
 
      <form class="form-inline" role="form" method="POST" action="{{ url_for('root.contact') }}">
 
        {{ form.hidden_tag()}}
 
        <div class="form-group">
 
          {{ form.country.label }}
 
          {{ form.country(_class="form-control") }}
 
          {{ form.country(class_='form-control input-sm', onchange='this.form.submit()') }}
 
          <noscript><input type="submit" class="btn btn-enn btn-sm" value="Submit"></noscript>
 
        </div>
 
        <input type="submit" class="btn btn-primary btn-sm" value="Submit">
 
      </form>
 
    </div>
 
    <div class="clearfix"></div>
 

	
 
  </div>
 
  <div class="col-md-8">
 
    <p>Please mail all general inquiries to:</p>
 
    <address>
 
      <strong>Frënn vun der Ënn, ASBL</strong><br>
 
        BPM 381892<br>
 
        {{ address['address'] }}<br>
 
        {{ address['postal_code'] }}, {{ address['city'] }}<br>
 
        {{ address['country'] }}<br>
 
        <br>
 
      <abbr title="E-Mail"><span class="glyphicon glyphicon-envelope"></span></abbr> : <a href="mailto:info@enn.lu">info@enn.lu</a> <span class="glyphicon glyphicon-lock"></span> GPG: <a href="http://keyserver.cypherpunk.lu:11371/pks/lookup?search=info@enn.lu&op=vindex" target="_blank">0x02225522</a><br>
 
      <abbr title="Website"><span class="glyphicon glyphicon-cloud"></span></abbr> : <a href="//enn.lu/">enn.lu/</a> <strong>or</strong> <a href="//{{ config['ENNSTATUS_ONION_ADDRESS'] }}/" target="_blank">{{ config['ENNSTATUS_ONION_ADDRESS'] }}</a><br>
 
      <abbr title="Phone"><span class="glyphicon glyphicon-earphone"></span></abbr> : +352-691-71-77-44<br>
 
      <abbr title="Fax"><span class="glyphicon glyphicon-phone-alt"></span></abbr> : +352-20-21-18-60
ennstatus/templates/root/index.html
Show inline comments
 
{% extends "base.html" %}
 

	
 
{% set title = "Index" %}
 

	
 
{% block styles %}
 
  {{ super() }}
 
  <link rel="stylesheet" href="{{ url_for('static', filename='js/video.js/dist/video-js.min.css') }}">
 
{% endblock %}
 

	
 
{% block content %}
 
  <div class="col-md-4 text-center">
 
    <img class="img-rounded" alt="FVDE_Logo" src="{{ url_for('static', filename='images/logo/FVDE_logo_resize.png') }}"></img>
 
  <div class="col-md-4">
 
    <img class="img-rounded center-block" alt="FVDE_Logo" src="{{ url_for('static', filename='images/logo/FVDE_logo_resize.png') }}"></img>
 
  </div>
 
  <div class="col-md-8">
 
    <div class="jumbotron">
 
      <h2>Frënn vun der Ënn A.S.B.L.</h2>
 
	    <p><em>Luxembourg based non-profit organization defending civil rights on the internet.</em></p>
 
      <p>We provide high-bandwidth Tor nodes all over the world to protect <strong>online privacy</strong>, <strong>anonymity</strong>, <strong>freedom of speech</strong> and fight <strong>censorship</strong>!
 
      </p>
 
      <h3><a href="{{ url_for('root.member') }}"><span class="label label-success">Become a Member</span></a> <a href="{{ url_for('donate.index') }}"><span class="label label-primary">Donate</span></a>
 
        <a class="pull-right" href="https://twitter.com/FrennVunDerEnn" target="blank"><span class="label label-info">@FrennVunDerEnn</span></a></h3>
 
      <span class="highlighted-label"><a href="{{ url_for('root.member') }}"><span class="label label-success">Become a Member</span></a></span>
 
      <span class="highlighted-label"><a href="{{ url_for('donate.index') }}"><span class="label label-primary">Donate</span></a></span>
 
      <span class="highlighted-label pull-right"><a href="https://twitter.com/FrennVunDerEnn" target="blank"><span class="label label-info">@FrennVunDerEnn</span></a></span>
 
    </div>
 
  </div>
 
  <div class="col-md-1">
 
  </div>
 
  <div class="col-md-8">
 
    <blockquote>
 
      <p>
 
        <em>I support <abbr title="Frënn vun der Ënn a.s.b.l.">FVDE</abbr> because even small organizations can contribute to protect fundamental civil rights. This noble goal can be pursued by making use of technology and putting knowledge to the service of users who want to maintain their privacy.</em>
 
        <footer>Georges, Teacher</footer>
 
      </p>
 
    </blockquote>
 
  </div>
 
  <div class="col-md-3">
 
    <blockquote>
 
      <a href="https://martianhumorist.me/141015-2/" target="blank"><h2 class="text-center">You have something to hide!</h2></a>
 
      <footer>The Martian Humorist</footer>
 
    </blockquote>
 
  </div>
 
  <div class="col-md-6">
 
    <p>
 
      <video id="tor-animation" width="560" height="315" controls preload="none" class="video-js vjs-default-skin vjs-big-play-centered" data-setup="">
 
    <div class="embed-responsive embed-responsive-16by9">
 
      <video id="tor-animation" width="560" height="315" controls preload="none" class="video-js vjs-default-skin vjs-big-play-centered embed-responsive-item" data-setup="">
 
        <source src="{{ url_for('static', filename='videos/Tor_Animation.webm') }}" type='video/webm' />
 
        <source src="{{ url_for('static', filename='videos/Tor_Animation.mp4') }}" type='video/mp4' />
 

	
 
        <track src="{{ url_for('static', filename='videos/subtitles/Tor_animation.de.vtt') }}" srclang="de" label="Deutsch">
 
        <track src="{{ url_for('static', filename='videos/subtitles/Tor_animation.en.vtt') }}" srclang="en" label="English">
 
        <track src="{{ url_for('static', filename='videos/subtitles/Tor_animation.fr.vtt') }}" srclang="fr" label="Français">
 
        <track src="{{ url_for('static', filename='videos/subtitles/Tor_animation.ar.vtt') }}" srclang="ar" label="العربية">
 
        <track src="{{ url_for('static', filename='videos/subtitles/Tor_animation.ca.vtt') }}" srclang="ca" label="Català">
 
        <track src="{{ url_for('static', filename='videos/subtitles/Tor_animation.es.vtt') }}" srclang="es" label="Español">
 
        <track src="{{ url_for('static', filename='videos/subtitles/Tor_animation.eu.vtt') }}" srclang="eu" label="Euskal">
 
        <track src="{{ url_for('static', filename='videos/subtitles/Tor_animation.fa.vtt') }}" srclang="fa" label="فارسی">
 
        <track src="{{ url_for('static', filename='videos/subtitles/Tor_animation.fi.vtt') }}" srclang="fi" label="Suomi">
 
        <track src="{{ url_for('static', filename='videos/subtitles/Tor_animation.id.vtt') }}" srclang="id" label="Indonesian">
 
        <track src="{{ url_for('static', filename='videos/subtitles/Tor_animation.it.vtt') }}" srclang="it" label="Italinao">
 
        <track src="{{ url_for('static', filename='videos/subtitles/Tor_animation.lv.vtt') }}" srclang="lv" label="Latvijā">
 
        <track src="{{ url_for('static', filename='videos/subtitles/Tor_animation.pl.vtt') }}" srclang="pl" label="Polskie">
 
        <track src="{{ url_for('static', filename='videos/subtitles/Tor_animation.pt.vtt') }}" srclang="pt" label="Português">
 
        <track src="{{ url_for('static', filename='videos/subtitles/Tor_animation.ru.vtt') }}" srclang="ru" label="русский">
 
        <track src="{{ url_for('static', filename='videos/subtitles/Tor_animation.sq.vtt') }}" srclang="sq" label="Shqiptar">
 
        <track src="{{ url_for('static', filename='videos/subtitles/Tor_animation.sv.vtt') }}" srclang="sv" label="Svenska">
 
        <track src="{{ url_for('static', filename='videos/subtitles/Tor_animation.tl-PH.vtt') }}" srclang="tl-PH" label="Fillipino">
 
        <track src="{{ url_for('static', filename='videos/subtitles/Tor_animation.zh-CN.vtt') }}" srclang="zh-CN" label="Chinese (China)">
 
        <track src="{{ url_for('static', filename='videos/subtitles/Tor_animation.zh-HK.vtt') }}" srclang="zh-HK" label="Chinese (Hongkong)">
 
      </video>
 
    </p>
 
    </div>
 
  </div>
 
  <div class="col-md-6">
 
      <p class=lead>
 
        <br>
 
        Tor is free software and an open network that helps you defend against network surveillance and preserve your personal freedom and privacy on the Internet.
 
      </p>
 
      <p>
 
        By bouncing your communications around a distributed network of relays run by volunteers all around the world, it prevents somebody watching your Internet connection from learning what sites you visit, and it prevents the sites you visit from learning your physical location.
 
      </p>
 
      <h2><a href="http://torproject.lu" target="blank"><span class="label label-info">Learn more about Tor</span></a></h2>
 
      <span class="highlighted-label-big"><a href="http://torproject.lu" target="blank"><span class="label label-info">Learn more about Tor</span></a></span>
 
  </div>
 
{% endblock %}
 

	
 
{% block scripts %}
 
  {{ super() }}
 
  <script src="{{ url_for('static', filename='js/video.js/dist/video.min.js') }}"></script>
 
  <script>
 
    videojs.options.flash.swf = "{{ url_for('static', filename='js/video.js/dist/video-js.swf') }}"
 
  </script>
 
{% endblock %}
ennstatus/templates/root/member.html
Show inline comments
 
{% extends "base.html" %}
 

	
 
{% set title = "Member" %}
 

	
 
{% block content %}
 
  <div class="col-md-4 text-center">
 
    <img src="{{ url_for('static', filename='images/Partners.png') }}" class="img-rounded" alt="Partners" width="160"></img>
 
    <h3>Join</h3>
 
  <div class="col-md-4">
 
    <img src="{{ url_for('static', filename='images/Partners.png') }}" class="img-responsive img-rounded center-block" alt="Partners" width="160"></img>
 
    <div class="text-center">
 
      <h2>Join</h2>
 
    </div>
 
  </div>
 
  <div class="col-md-8">
 
    <h2>Membership</h2>
 
    <p class="lead">Joining our organization has several advantages.</p>
 
    <p>As an active member you get to know the people behind <abbr title="Frënn vun der Enn a.s.b.l.">FVDE</abbr> and you can join us on our weekly meetings (online or AFK).
 
       You'll have the possibility to actively contribute to our projects,
 
       bring in new ideas, and eventually become a part of our core team.</p>
 

	
 
    <p>We are a dynamic group of people with different backgrounds and skills
 
       who constantly learn from each other. Most of us have a broader
 
       knowledge in Tor, network security and FOSS in general,
 
       but our activities aren't limited to technical questions alone.
ennstatus/templates/root/membership.html
Show inline comments
 
@@ -51,22 +51,22 @@
 
            <label class="btn btn-success" for="c3l">
 
              <span class="glyphicon glyphicon-plus"></span>
 
              <span class="glyphicon glyphicon-minus"></span>
 
            </label>
 
            <label class="btn btn-default" for="c3l">
 
              {{ form.c3l.label.text|safe }}
 
            </label>
 
          </div>
 
        </div>
 
      </div>
 
      <div class="form-group">
 
        <div class="col-lg-offset-2 col-lg-10">
 
        {{ form.submit(class_='btn btn-primary') }}
 
        {{ form.submit(class_='btn btn-enn') }}
 
        </div>
 
      </div>
 
    </div>
 
    </form>
 
    <p>Field marked with * are required!</p>
 
    <p><sup>1</sup>: If you have decided to apply for the <i>double membership</i>, the membership fees are 150€/year for the regular
 
    membership and 70€/year for the student membership.</p>
 
  </div>
 
{% endblock %}
ennstatus/templates/root/mirrors.html
Show inline comments
 
@@ -2,27 +2,29 @@
 

	
 
{% set title = "Partners" %}
 

	
 
{% if '.onion' in request.url_root %}
 
  {% set globe_url = config['ENNSTATUS_GLOBE_ONION_ADDRESS'] %}
 
{% elif '.bit' in request.url_root %}
 
  {% set globe_url = config['ENNSTATUS_GLOBE_BIT_ADDRESS'] %}
 
{% else %}
 
  {% set globe_url = "globe.enn.lu" %}
 
{% endif %}
 

	
 
{% block content %}
 
  <div class="col-md-4 text-center">
 
    <img src="{{ url_for('static', filename='images/Services.png') }}" class="img-rounded" alt="Partners" width="160"></img>
 
    <h3>Mirrors</h3>
 
  <div class="col-md-4">
 
    <img src="{{ url_for('static', filename='images/Services.png') }}" class="img-responsive img-rounded center-block" alt="Partners" width="160"></img>
 
    <div class="text-center">
 
      <h2>Mirrors</h2>
 
    </div>
 
  </div>
 
  <div class="col-md-8">
 
    <h2>Mirrors</h2>
 
    <p class="lead">In addition to our Tor relays we are providing mirrors for some popular services.</p>
 
    <dl>
 
      <dt><a href="http://torproject.lu" target="_blank">torproject.lu</a></dt>
 
      <dd>This is a mirror of the the Tor Project's main website torproject.org</dd>
 
      <br>
 
      <dt><a href="http://tails.c3l.lu/" target="_blank">tails.enn.lu</a></dt>
 
      <dd>A Tails Download mirror. Tails is a live operating system, that you can start on almost any computer from a DVD, USB stick, or SD card. It aims at preserving your privacy and anonymity. <a href="https://tails.boum.org/" target="blank">Learn more about Tails</a></dd>
 
      <br>
 
      <dt><a href="//{{ globe_url }}" target="_blank">globe.enn.lu</a></dt>
ennstatus/templates/root/partners.html
Show inline comments
 
{% extends "base.html" %}
 

	
 
{% set title = "Partners" %}
 

	
 
{% block content %}
 
  <div class="col-md-4 text-center">
 
    <img src="{{ url_for('static', filename='images/Partners.png') }}" class="img-rounded" alt="Partners" width="160"></img>
 
    <h3>Partners</h3>
 
  <div class="col-md-4">
 
    <img src="{{ url_for('static', filename='images/Partners.png') }}" class="img-responsive img-rounded center-block" alt="Partners" width="160"></img>
 
    <div class="text-center">
 
      <h2>Partners</h2>
 
    </div>
 
  </div>
 
  <div class="col-md-8">
 
    <h2>Partners</h2>
 
    <p class="lead">We are constantly looking for new partners who want join us in our endevaour for a free Internet. At the moment we are beeing supported by the following organizations:</p>
 
    <dl>
 
      <dt><a href="https://torservers.net/" target="_blank">TorServers.net</a></dt>
 
      <dd>Central information point for the international Tor operators community.</dd>
 
      <br>
 
      <dt><a href="http://c3l.lu/" target="_blank">Chaos Computer Club Lëtzebuerg</a></dt>
 
      <dd>NPO with strong interests in IT-Security, citizen rights and pivacy. Our mother organization.</dd>
 
      <br>
 
      <dt><a href="http://piratepartei.lu/" target="_blank">Piratepartei Lëtzebuerg</a></dt>
ennstatus/templates/root/services.html
Show inline comments
 
deleted file
ennstatus/templates/statistics/worldmap.html
Show inline comments
 
@@ -7,16 +7,16 @@
 
  <link rel="stylesheet" href="{{ url_for('static', filename='css/map.css') }}" />
 
{% endblock %}
 

	
 
{% block content %}
 
  <div class="col-md-12">
 
    <div id="chart">
 
    </div>
 
  </div>
 
{% endblock %}
 

	
 
{% block scripts %}
 
  {{ super() }}
 
  <script src="{{ url_for('static', filename="js/d3/d3.min.js") }}"></script>
 
  <script src="{{ url_for('static', filename="js/topojson/topojson.js") }}"></script>
 
  <script src="{{ url_for('static', filename="js/worldmap.js") }}"></script>
 
  <script src="{{ url_for('static', filename='js/d3/d3.min.js') }}"></script>
 
  <script src="{{ url_for('static', filename='js/topojson/topojson.js') }}"></script>
 
  <script src="{{ url_for('static', filename='js/worldmap.js') }}"></script>
 
{% endblock %}
ennstatus/templates/status/about.html
Show inline comments
 
deleted file
ennstatus/templates/status/macros.html
Show inline comments
 
@@ -46,24 +46,25 @@
 
{% macro create_date(date) %}
 
  {{ moment(date).format(config['ENNSTATUS_MOMENTJS_FORMAT']) }}
 
  <noscript>{{ date.strftime(config['ENNSTATUS_STRFTIME_FORMAT']) }}</noscript>
 
{% endmacro %}
 

	
 
{% macro create_server_table(server_type, servers) %}
 
  {% if server_type in ('exit', 'relay') %}
 
    {% set headers = ('#', 'Name', 'IP', 'IP6', 'Tor Status', 'Country', 'Fingerprint', 'Last Updated <noscript>(UTC)</noscript>') %}
 
  {% else %}
 
    {% set headers = ('#', 'Name', 'Tor Status', 'Country', 'Fingerprint', 'OBFS', 'FTEProxy', 'Flashproxy', 'meek', 'Last Updated <noscript>(UTC)</noscript>') %}
 
  {% endif %}
 
  <h2>{{ server_type|title }}</h2>
 
  <div class="table-responsive">
 
  <table class="table table-bordered table-striped sortable">
 
    <thead>
 
      <tr>
 
        {% for name in headers %}
 
          <th>{{ name|safe }}</th>
 
        {% endfor %}
 
      </tr>
 
    </thead>
 
    <tbody>
 
      {% for server in servers|sort(attribute='name')|sort(attribute='country') %}
 
      <tr {% if server.name in config['ENNSTATUS_BRIDGE_PROGRAM'] %}class="info"{% endif %}>
 
          <td>{{ loop.index }}</td>
 
@@ -86,19 +87,20 @@
 
          {% if server_type == 'bridge' %}
 
            <td>{{ colorize_obfs(server.obfs) }}</td>
 
            <td>{{ colorize_obfs(server.fteproxy) }}</td>
 
            <td>{{ colorize_obfs(server.flashproxy) }}</td>
 
            <td>{{ colorize_obfs(server.meek) }}</td>
 
          {% endif %}
 
          <td>{{ create_date(server.last_updated) }}
 
          </td>
 
        </tr>
 
      {% endfor %}
 
    </tbody>
 
  </table>
 
  </div>
 
  {% if server_type == 'bridge' %}
 
    <div class="alert alert-info alert-dismissible" role="alert">
 
      <button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
 
      <p>See our <a class="alert-link" href="{{ url_for('root.bridgeprogram') }}">bridge program</a>, if you want to fund some bridges!</p>
 
    </div>
 
  {% endif %}
 
{% endmacro %}
setup.py
Show inline comments
 
@@ -2,25 +2,25 @@ from setuptools import setup, find_packa
 

	
 

	
 
def _get_requirements():
 

	
 
    with open('requirements.in', encoding='utf-8') as f:
 
        lines = f.readlines()
 

	
 
    lines = [line[:-1] for line in lines if not line.startswith('#')]
 
    return lines
 

	
 

	
 
setup(name='Ennstatus',
 
      version='5.0.3',
 
      version='5.0.3-dev',
 
      description=('Ennstatus provides the user with vital information about '
 
                   'the status of the organizations Tor servers.'),
 
      author='Frënn vun der Ënn',
 
      author_email='info@enn.lu',
 
      url='https://bitbucket.org/fvde/ennstatus',
 
      license='GPLv3+',
 
      packages=find_packages(),
 
      install_requires=_get_requirements(),
 
      include_package_data=True,
 
      entry_points={
 
          'console_scripts': [
 
              'ennstatuscli = ennstatus.cli:cli',
0 comments (0 inline, 0 general)