diff options
| author | 2016-11-04 19:01:02 -0400 | |
|---|---|---|
| committer | 2016-11-04 19:05:28 -0400 | |
| commit | bfb99d14e7af3fd8bf43338d6cdbf40eb1a10ba6 (patch) | |
| tree | 82d19a0791013df1f593813ad2b8713c2a47d6fe | |
| parent | 16f0d0b483c718ff58a71f281d3f41a91548beb4 (diff) | |
| download | aliases-bfb99d14e7af3fd8bf43338d6cdbf40eb1a10ba6.tar.gz aliases-bfb99d14e7af3fd8bf43338d6cdbf40eb1a10ba6.tar.bz2 aliases-bfb99d14e7af3fd8bf43338d6cdbf40eb1a10ba6.zip | |
| -rw-r--r-- | aliases/__init__.py | 1 | ||||
| -rw-r--r-- | aliases/aliases.py | 40 | ||||
| -rw-r--r-- | aliases/models.py | 35 | ||||
| -rw-r--r-- | aliases/templates/index.html | 59 |
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> |