Преглед на файлове

Merge branch 'master' of github.com:joostsijm/ssg

JoostSijm преди 6 години
родител
ревизия
346573779c

+ 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

@@ -70,7 +70,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"""
@@ -79,7 +79,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):
@@ -88,6 +91,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")
@@ -116,7 +120,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)
 
     def extension(self):
         """Return file extension"""

+ 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'))

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

@@ -4,6 +4,7 @@ Backend
 """
 
 import os
+import shutil
 
 from flask_login import login_required
 from flask_menu import register_menu
@@ -43,6 +44,11 @@ def render():
         menu.append(generate_menu(page))
 
     path_base = 'app/modules/static/pages/'
+    shutil.rmtree(path_base + "public")
+    shutil.rmtree(path_base + "private")
+    os.makedirs(path_base + "public")
+    os.makedirs(path_base + "private")
+
     for page in pages:
         render_page(path_base, page, menu)
 
@@ -64,7 +70,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):

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

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

+ 7 - 2
app/modules/backend/templates/public/site.j2

@@ -6,7 +6,7 @@
     <script src="/static/js/main.js"></script>
 </head>
 <body>
-    <nav class="navbar navbar-expand-lg navbar-light bg-light">
+    <nav class="navbar navbar-expand-lg navbar-dark bg-dark">
         <a class="navbar-brand" href="/">Home</a>
         <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
             <span class="navbar-toggler-icon"></span>
@@ -34,9 +34,14 @@
                 {% 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>
+    <div class="container mt-3">
         {{ page.content() }}
     </div>
 </body>

+ 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)

+ 2 - 2
app/modules/static/pages/.gitignore

@@ -1,2 +1,2 @@
-*
-!.gitignore
+private
+public

+ 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')

Файловите разлики са ограничени, защото са твърде много
+ 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: [
         {

Някои файлове не бяха показани, защото твърде много файлове са промени