aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--aliases/__init__.py1
-rw-r--r--aliases/aliases.py40
-rw-r--r--aliases/models.py35
-rw-r--r--aliases/templates/index.html59
4 files changed, 135 insertions, 0 deletions
diff --git a/aliases/__init__.py b/aliases/__init__.py
index ef96ccd..487ebee 100644
--- a/aliases/__init__.py
+++ b/aliases/__init__.py
@@ -1 +1,2 @@
from aliases import app
+from models import *
diff --git a/aliases/aliases.py b/aliases/aliases.py
new file mode 100644
index 0000000..8aef861
--- /dev/null
+++ b/aliases/aliases.py
@@ -0,0 +1,40 @@
+# -*- coding: utf-8 -*-
+"""
+ # Aliases
+
+ A minimal web app to manage email aliases.
+
+ :copyright: (c) 2016 by Daniel Washburn
+ :license: Common Development and Distribution License (CDDL-1.0). See LICENSE
+
+"""
+
+from flask import Flask, Response, request, session, url_for, redirect, \
+ render_template, abort, g, flash, _app_ctx_stack
+from flask_debugtoolbar import DebugToolbarExtension
+
+app = Flask(__name__)
+app.config.from_object('config')
+
+toolbar = DebugToolbarExtension(app)
+
+from models import Alias
+
+
+@app.route('/')
+def index():
+ entries = Alias.query
+
+ return render_template('index.html', entries=entries)
+
+
+@app.route('/login', methods=['GET', 'POST'])
+def login():
+ # stub
+ return redirect(url_for('index'))
+
+
+@app.route('/logout')
+def logout():
+ # stub
+ return redirect(request.referrer or url_for('login'))
diff --git a/aliases/models.py b/aliases/models.py
new file mode 100644
index 0000000..a1b4287
--- /dev/null
+++ b/aliases/models.py
@@ -0,0 +1,35 @@
+from flask_sqlalchemy import SQLAlchemy
+from sqlalchemy.dialects.postgresql import ARRAY
+from aliases import app
+
+db = SQLAlchemy(app)
+
+class User(db.Model):
+ __tablename__ = 'admins'
+
+ id = db.Column(db.Integer, primary_key=True)
+ username = db.Column(db.String, unique=True)
+ domains = db.Column(ARRAY(db.String))
+
+ def __init__(self, username, domains):
+ self.username = username
+ self.domains = domains
+
+class Alias(db.Model):
+ __tablename__ = 'aliases'
+
+ id = db.Column(db.Integer, primary_key=True)
+ local_part = db.Column(db.String)
+ domain = db.Column(db.String)
+ action = db.Column(db.String)
+ destination = db.Column(db.String)
+ count = db.Column(db.Integer)
+ last_date = db.Column(db.DateTime)
+
+ def __init__(self, local_part, domain, action, destination, count, last_date):
+ self.local_part = local_part
+ self.domain = domain
+ self.action = action
+ self.destination = destination
+ self.count = count
+ self.last_date = last_date
diff --git a/aliases/templates/index.html b/aliases/templates/index.html
new file mode 100644
index 0000000..7cf1ce8
--- /dev/null
+++ b/aliases/templates/index.html
@@ -0,0 +1,59 @@
+<!DOCTYPE html>
+<html lang='en'>
+<head>
+<title>Aliases</title>
+<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='style.css') }}">
+<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='theme.purple.css') }}" />
+</head>
+<body>
+<div class="page">
+ <h1>Aliases</h1>
+ <div class="metanav">
+ {% for message in get_flashed_messages() %}
+ <div class="flash">{{ message }}</div>
+ {% endfor %}
+ </div>
+ {% block body %}
+
+ <table id="Aliases" class="tablesorter">
+ <thead>
+ <tr>
+ <td>Local Part</td>
+ <td>Domain</td>
+ <td>Action</td>
+ <td>Destination</td>
+ <td>Count</td>
+ <td>Last Delivery</td>
+ </tr>
+ </thead>
+ <tbody>
+ {% for entry in entries %}
+ <tr>
+ <td>{{ entry.local_part }}</td>
+ <td>{{ entry.domain }}</td>
+ <td>{{ entry.action }}</td>
+ <td>{{ entry.destination }}</td>
+ <td>{{ entry.count }}</td>
+ <td>{{ entry.last_date }}</td>
+ </tr>
+ {% endfor %}
+ </tbody>
+<script type="text/javascript" src="{{ url_for('static', filename='jquery-1.9.0.min.js') }}"></script>
+<script type="text/javascript" src="{{ url_for('static', filename='jquery.tablesorter.min.js') }}"></script>
+<script type="text/javascript" src="{{ url_for('static', filename='jquery.tablesorter.widgets.min.js') }}"></script>
+<script type="text/javascript">
+ $(function(){
+ $("#Aliases").tablesorter({
+ theme: 'purple',
+ widgets: ["zebra"],
+ sortInitialOrder: "asc",
+ sortList: [[0,0]],
+ });
+ });
+</script>
+ </table>
+
+ {% endblock %}
+</div>
+
+</body>