Browse Source

Add private option to pages and files

JoostSijm 6 years ago
parent
commit
66a8842774

+ 1 - 0
app/__init__.py

@@ -31,6 +31,7 @@ app = Flask(__name__)
 app.config.from_object(Config())
 app.jinja_env.lstrip_blocks = True
 app.jinja_env.trim_blocks = True
+app.config['TESTING'] = False
 
 # Compress settings
 COMPRESS_MIMETYPES = [

+ 8 - 3
app/models.py

@@ -67,7 +67,7 @@ class Page(db.Model):
     title = db.Column(db.String, nullable=False)
     datetime = db.Column(db.DateTime, default=datetime.utcnow)
     source = db.Column(db.String)
-
+    private = db.Column(db.Boolean, server_default='f', default=False)
 
     def content(self):
         """Render page source"""
@@ -76,7 +76,10 @@ class Page(db.Model):
 
     def url(self):
         """Generate URL for page"""
-        return quote(self.title.strip().lower().replace(" ", "_"))
+        url = quote(self.title.strip().lower().replace(" ", "_"))
+        if self.private and not self.parent_id:
+            return 'private/' + url
+        return url
 
 
     def path(self):
@@ -85,6 +88,7 @@ class Page(db.Model):
             return '%s/%s' % (self.parent.path(), self.url())
         return self.url()
 
+
     user_id = db.Column(
         db.Integer,
         db.ForeignKey("user.id")
@@ -113,7 +117,8 @@ class File(db.Model):
     title = db.Column(db.String, nullable=False)
     datetime = db.Column(db.DateTime, default=datetime.utcnow)
     path = db.Column(db.String, nullable=False)
-    identifier = db.Column(db.String) 
+    identifier = db.Column(db.String)
+    private = db.Column(db.Boolean, server_default='f', default=False)
 
     user_id = db.Column(
         db.Integer,

+ 1 - 2
app/modules/auth/app.py

@@ -94,5 +94,4 @@ def register():
 def logout():
     """Logout function for users"""
     logout_user()
-    flash('Successfully logged out.', 'success')
-    return redirect(url_for('auth.login'))
+    return redirect(url_for('static.show'))

+ 4 - 1
app/modules/backend/app.py

@@ -64,7 +64,10 @@ def generate_menu(page):
 
 def render_page(path, page, menu):
     """Function for page generation, recursive"""
-    path = path + page.url()
+    if not page.private and not page.parent_id:
+        path += 'public/' + page.url()
+    else:
+        path += page.url()
     if page.children.count():
         parent_path = path + '/'
         if not os.path.exists(parent_path):

+ 1 - 1
app/modules/backend/templates/layout/backend.j2

@@ -23,7 +23,7 @@
             </ul>
             <ul class="navbar-nav">
                 <li class="nav-item text-nowrap">
-                      <a class="nav-link" href="#">Sign out</a>
+                      <a class="nav-link" href="/logout">Logout</a>
                 </li>
             </ul>
         </div>

+ 5 - 0
app/modules/backend/templates/public/site.j2

@@ -34,6 +34,11 @@
                 {% endif %}
                 {% endfor %}
             </ul>
+            <ul class="navbar-nav">
+                <li class="nav-item text-nowrap">
+                      <a class="nav-link" href="/backend">backend</a>
+                </li>
+            </ul>
         </div>
     </nav>
     <div>

+ 2 - 0
app/modules/backend/templates/site/index.j2

@@ -13,6 +13,7 @@
                         <tr>
                             <th>Action</th>
                             <th>Title</th>
+                            <th>Private</th>
                             <th>Author</th>
                         </tr>
                     </thead>
@@ -36,6 +37,7 @@
                                     {{ page.title if page.title else 'page %s' % page.id }}
                                 </a>
                             </td>
+                            <td>{{ page.private }}</td>
                             <td>{{ page.user.name }}</td>
                         </tr>
                         {{ loop(page.children) }}

+ 13 - 1
app/modules/static/app.py

@@ -5,6 +5,7 @@ Serve static content
 
 from flask import render_template, Blueprint, abort
 from jinja2 import TemplateNotFound
+from flask_login import login_required
 
 
 BLUEPRINT = Blueprint(
@@ -13,11 +14,22 @@ BLUEPRINT = Blueprint(
     template_folder='pages'
 )
 
+@BLUEPRINT.route("/private", defaults={"page": "index"})
+@BLUEPRINT.route("/private/<path:page>")
+@login_required
+def private_show(page):
+    """Display static page"""
+    try:
+        return render_template("private/%s.html" % page)
+    except TemplateNotFound:
+        abort(404)
+
+
 @BLUEPRINT.route("/", defaults={"page": "index"})
 @BLUEPRINT.route("/<path:page>")
 def show(page):
     """Display static page"""
     try:
-        return render_template("%s.html" % page)
+        return render_template("public/%s.html" % page)
     except TemplateNotFound:
         abort(404)

+ 26 - 0
migrations/versions/64c257f78218_page_and_file_add_private_boolean.py

@@ -0,0 +1,26 @@
+"""page_and_file_add_private_boolean
+
+Revision ID: 64c257f78218
+Revises: d4774c761a71
+Create Date: 2019-02-26 21:09:02.780265
+
+"""
+from alembic import op
+import sqlalchemy as sa
+
+
+# revision identifiers, used by Alembic.
+revision = '64c257f78218'
+down_revision = 'd4774c761a71'
+branch_labels = None
+depends_on = None
+
+
+def upgrade():
+    op.add_column('file', sa.Column('private', sa.Boolean(), server_default='f', nullable=True))
+    op.add_column('page', sa.Column('private', sa.Boolean(), server_default='f', nullable=True))
+
+
+def downgrade():
+    op.drop_column('page', 'private')
+    op.drop_column('file', 'private')

File diff suppressed because it is too large
+ 164 - 35
package-lock.json


+ 5 - 0
webpack.config.js

@@ -15,6 +15,11 @@ module.exports = {
            jQuery: "jquery"
        })
     ],
+    devServer: {
+        proxy: {
+            '/': 'http://localhost:5000'
+        }
+    },
     module: {
       rules: [
         {

Some files were not shown because too many files changed in this diff