{% with messages = get_flashed_messages(with_categories=True) %}
{% if messages %}
{% for category, message in messages %}
@@ -79,7 +77,7 @@
{{ moment.include_moment() }}
{{ moment.lang(g.locale) }}
{% endblock %}
-
+ {{ bootstrap.load_js() }}
diff --git a/app/templates/list_communities.html b/app/templates/list_communities.html
new file mode 100644
index 00000000..3aef3a31
--- /dev/null
+++ b/app/templates/list_communities.html
@@ -0,0 +1,6 @@
+{% extends "base.html" %}
+{% from 'bootstrap5/form.html' import render_form %}
+
+{% block app_content %}
+
Community list goes here.
+{% endblock %}
diff --git a/migrations/versions/e8fe5eff9532_additional_user_and_community.py b/migrations/versions/e8fe5eff9532_additional_user_and_community.py
new file mode 100644
index 00000000..2c799eda
--- /dev/null
+++ b/migrations/versions/e8fe5eff9532_additional_user_and_community.py
@@ -0,0 +1,63 @@
+"""additional user and community
+
+Revision ID: e8fe5eff9532
+Revises: 1a9507704262
+Create Date: 2023-08-10 21:46:25.190829
+
+"""
+from alembic import op
+import sqlalchemy as sa
+
+
+# revision identifiers, used by Alembic.
+revision = 'e8fe5eff9532'
+down_revision = '1a9507704262'
+branch_labels = None
+depends_on = None
+
+
+def upgrade():
+ # ### commands auto generated by Alembic - please adjust! ###
+ op.create_table('instance',
+ sa.Column('id', sa.Integer(), nullable=False),
+ sa.Column('domain', sa.String(length=256), nullable=True),
+ sa.Column('inbox', sa.String(length=256), nullable=True),
+ sa.Column('shared_inbox', sa.String(length=256), nullable=True),
+ sa.Column('outbox', sa.String(length=256), nullable=True),
+ sa.PrimaryKeyConstraint('id')
+ )
+ with op.batch_alter_table('banned_instances', schema=None) as batch_op:
+ batch_op.create_index(batch_op.f('ix_banned_instances_domain'), ['domain'], unique=False)
+
+ with op.batch_alter_table('community', schema=None) as batch_op:
+ batch_op.add_column(sa.Column('restricted_to_mods', sa.Boolean(), nullable=True))
+
+ with op.batch_alter_table('post', schema=None) as batch_op:
+ batch_op.add_column(sa.Column('body_html', sa.Text(), nullable=True))
+ batch_op.add_column(sa.Column('ap_create_id', sa.String(length=100), nullable=True))
+ batch_op.add_column(sa.Column('ap_announce_id', sa.String(length=100), nullable=True))
+
+ with op.batch_alter_table('post_reply', schema=None) as batch_op:
+ batch_op.add_column(sa.Column('body_html', sa.Text(), nullable=True))
+
+ # ### end Alembic commands ###
+
+
+def downgrade():
+ # ### commands auto generated by Alembic - please adjust! ###
+ with op.batch_alter_table('post_reply', schema=None) as batch_op:
+ batch_op.drop_column('body_html')
+
+ with op.batch_alter_table('post', schema=None) as batch_op:
+ batch_op.drop_column('ap_announce_id')
+ batch_op.drop_column('ap_create_id')
+ batch_op.drop_column('body_html')
+
+ with op.batch_alter_table('community', schema=None) as batch_op:
+ batch_op.drop_column('restricted_to_mods')
+
+ with op.batch_alter_table('banned_instances', schema=None) as batch_op:
+ batch_op.drop_index(batch_op.f('ix_banned_instances_domain'))
+
+ op.drop_table('instance')
+ # ### end Alembic commands ###
diff --git a/pyfedi.py b/pyfedi.py
index b564fad5..203ce59f 100644
--- a/pyfedi.py
+++ b/pyfedi.py
@@ -1,3 +1,7 @@
+# This file is part of pyfedi, which is licensed under the GNU General Public License (GPL) version 3.0.
+# You should have received a copy of the GPL along with this program. If not, see
.
+
+
from app import create_app, db, cli
import os
diff --git a/requirements.txt b/requirements.txt
index b1809abd..8517a36b 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -14,3 +14,7 @@ pyjwt==2.8.0
SQLAlchemy-Searchable==1.4.1
SQLAlchemy-Utils==0.41.1
cryptography==41.0.3
+Bootstrap-Flask==2.3.0
+pycryptodome==3.18.0
+arrow==1.2.3
+pyld==2.0.3