mirror of
https://github.com/Mailu/Mailu.git
synced 2025-02-13 13:28:30 +02:00
Setup a basic flask-admin interface
This commit is contained in:
parent
9df197f412
commit
a5ffcfdc90
16
admin/freeposte/__init__.py
Normal file
16
admin/freeposte/__init__.py
Normal file
@ -0,0 +1,16 @@
|
||||
from flask import Flask
|
||||
from flask_sqlalchemy import SQLAlchemy
|
||||
|
||||
|
||||
|
||||
# Create application
|
||||
app = Flask(__name__)
|
||||
|
||||
app.config.update({
|
||||
'SQLALCHEMY_DATABASE_URI': 'sqlite:////tmp/freeposte.db'
|
||||
})
|
||||
|
||||
# Create the database
|
||||
db = SQLAlchemy(app)
|
||||
|
||||
from freeposte import views
|
BIN
admin/freeposte/__pycache__/__init__.cpython-35.pyc
Normal file
BIN
admin/freeposte/__pycache__/__init__.cpython-35.pyc
Normal file
Binary file not shown.
BIN
admin/freeposte/__pycache__/models.cpython-35.pyc
Normal file
BIN
admin/freeposte/__pycache__/models.cpython-35.pyc
Normal file
Binary file not shown.
BIN
admin/freeposte/__pycache__/views.cpython-35.pyc
Normal file
BIN
admin/freeposte/__pycache__/views.cpython-35.pyc
Normal file
Binary file not shown.
34
admin/freeposte/models.py
Normal file
34
admin/freeposte/models.py
Normal file
@ -0,0 +1,34 @@
|
||||
from freeposte import db
|
||||
|
||||
|
||||
class Domain(db.Model):
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
name = db.Column(db.String(80))
|
||||
max_users = db.Column(db.Integer)
|
||||
max_aliases = db.Column(db.Integer)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
|
||||
class User(db.Model):
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
username = db.Column(db.String(80))
|
||||
domain_id = db.Column(db.Integer, db.ForeignKey(Domain.id))
|
||||
domain = db.relationship(Domain, backref='users')
|
||||
password = db.Column(db.String(255))
|
||||
quota_bytes = db.Column(db.Integer())
|
||||
|
||||
def __str__(self):
|
||||
return '{0}@{1}'.format(self.username, self.domain.name)
|
||||
|
||||
|
||||
class Alias(db.Model):
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
localpart = db.Column(db.String(80))
|
||||
domain_id = db.Column(db.Integer, db.ForeignKey(Domain.id))
|
||||
domain = db.relationship(Domain, backref='aliases')
|
||||
destination = db.Column(db.String())
|
||||
|
||||
def __str__(self):
|
||||
return '{0}@{1}'.format(self.username, self.domain.name)
|
26
admin/freeposte/views.py
Normal file
26
admin/freeposte/views.py
Normal file
@ -0,0 +1,26 @@
|
||||
import flask_admin as admin
|
||||
from flask_admin.contrib import sqla
|
||||
|
||||
from freeposte import app, db, models
|
||||
|
||||
|
||||
# Flask admin
|
||||
admin = admin.Admin(app, name='Freeposte.io', template_mode='bootstrap3')
|
||||
|
||||
|
||||
class DomainModelView(sqla.ModelView):
|
||||
pass
|
||||
|
||||
|
||||
class UserModelView(sqla.ModelView):
|
||||
pass
|
||||
|
||||
|
||||
class AliasModelView(sqla.ModelView):
|
||||
pass
|
||||
|
||||
|
||||
# Add views
|
||||
admin.add_view(DomainModelView(models.Domain, db.session))
|
||||
admin.add_view(UserModelView(models.User, db.session))
|
||||
admin.add_view(AliasModelView(models.Alias, db.session))
|
2
admin/requirements.txt
Normal file
2
admin/requirements.txt
Normal file
@ -0,0 +1,2 @@
|
||||
Flask
|
||||
Flask-SQLAlchemy
|
5
admin/run.py
Normal file
5
admin/run.py
Normal file
@ -0,0 +1,5 @@
|
||||
from freeposte import app
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
app.run(debug=True)
|
7
admin/testdb.py
Normal file
7
admin/testdb.py
Normal file
@ -0,0 +1,7 @@
|
||||
from freeposte import db, models
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
db.drop_all()
|
||||
db.create_all()
|
||||
db.session.commit()
|
@ -3,8 +3,14 @@ connect = /data/freeposte.db
|
||||
|
||||
# Return the user hashed password
|
||||
password_query = \
|
||||
SELECT password FROM users, domains WHERE username = '%n' AND domain = '%d'
|
||||
SELECT password \
|
||||
FROM users INNER JOIN domains ON users.domain_id = domains.id \
|
||||
WHERE domains.name = '%d' \
|
||||
AND users.username = '%n'
|
||||
|
||||
# Mostly get the user quota
|
||||
user_query = \
|
||||
SELECT '*:bytes=' || quota_bytes AS quota_rule FROM users WHERE username = '%n' AND domain = '%d'
|
||||
SELECT '*:bytes=' || users.quota_bytes AS quota_rule \
|
||||
FROM users INNER JOIN domains ON users.domain_id = domains.id \
|
||||
WHERE domains.name = '%d' \
|
||||
AND users.username = '%n'
|
||||
|
@ -1,2 +1,6 @@
|
||||
dbpath = /data/freeposte.db
|
||||
query = SELECT destination FROM aliases WHERE localpart = '%u' AND domain = '%d'
|
||||
query = \
|
||||
SELECT destination \
|
||||
FROM aliases INNER JOIN domains ON aliases.domain_id = domains.id \
|
||||
WHERE domains.name = '%d' \
|
||||
AND aliases.localpart = '%n'
|
||||
|
@ -1,2 +1,2 @@
|
||||
dbpath = /data/freeposte.db
|
||||
query = SELECT domain FROM domains WHERE domain='%s'
|
||||
query = SELECT name FROM domains WHERE domain='%s'
|
||||
|
Loading…
x
Reference in New Issue
Block a user