users must login

This commit is contained in:
2024-02-20 11:46:56 +01:00
parent 00131b77ee
commit 2d6b5ae823
11 changed files with 171 additions and 22 deletions

View File

@@ -0,0 +1,68 @@
Metadata-Version: 2.1
Name: cao_osint
Version: 1.0
Summary: cao_osint
Home-page:
Author:
Author-email:
Keywords: web pyramid pylons
Classifier: Programming Language :: Python
Classifier: Framework :: Pyramid
Classifier: Topic :: Internet :: WWW/HTTP
Classifier: Topic :: Internet :: WWW/HTTP :: WSGI :: Application
Requires-Dist: plaster_pastedeploy
Requires-Dist: pyramid
Requires-Dist: pyramid_jinja2
Requires-Dist: pyramid_debugtoolbar
Requires-Dist: waitress
Requires-Dist: alembic
Requires-Dist: pyramid_retry
Requires-Dist: pyramid_layout
Requires-Dist: pyramid_tm
Requires-Dist: python-magic
Requires-Dist: SQLAlchemy
Requires-Dist: transaction
Requires-Dist: zope.sqlalchemy
Requires-Dist: wtforms
Requires-Dist: webhelpers2
Requires-Dist: passlib
Requires-Dist: markdown
Provides-Extra: testing
Requires-Dist: WebTest>=1.3.1; extra == "testing"
Requires-Dist: pytest>=3.7.4; extra == "testing"
Requires-Dist: pytest-cov; extra == "testing"
# README #
**cao_osint** est une application pour créer un blog simple. Elle est inspirée du tutorial [**pyramid_blogr**](https://docs.pylonsproject.org/projects/pyramid-blogr/en/latest/index.html).
## Fonctionnalités ##
Bien que **cao_osint** soit une application minimale et simple, elle possède toutes les fonctions nécessaire pour gérer un blog :
- Gestion des utilisateurs du blog (admin ou rédacteur)
- Authentification et autorisation des utilisateurs
- Gestion des posts du blog avec des statuts : *publié, brouillon ou privé*
- Gestion des tags (un post peut avoir un tag)
- Les posts sont rédigé avec le langage *Markdown*
- Possibilité de faire des recherches sur le titre et le corps des posts
## Add-on requis ##
- Python 3.7.1
- Pyramid 1.10
- SQLite 3.35.5
- pyramid-jinja2 2.7 : view templating
- wtforms 2.2.1 : form library
- webhelpers2 2.0 : various web building related helpers
- Markdown 3.4.1 :
### 1.0 (22.01.2023)
- version initiale
0.1
---
- Initial version.

View File

@@ -0,0 +1,55 @@
CHANGES.txt
MANIFEST.in
README.md
development.ini
production.ini
pytest.ini
rtd.txt
setup.py
cao_osint/__init__.py
cao_osint/forms.py
cao_osint/pshell.py
cao_osint/routes.py
cao_osint/security.py
cao_osint/tests.py
cao_osint.egg-info/PKG-INFO
cao_osint.egg-info/SOURCES.txt
cao_osint.egg-info/dependency_links.txt
cao_osint.egg-info/entry_points.txt
cao_osint.egg-info/not-zip-safe
cao_osint.egg-info/requires.txt
cao_osint.egg-info/top_level.txt
cao_osint/alembic/script.py.mako
cao_osint/alembic/versions/README.txt
cao_osint/models/__init__.py
cao_osint/models/blog_record.py
cao_osint/models/meta.py
cao_osint/models/user.py
cao_osint/scripts/__init__.py
cao_osint/scripts/initialize_db.py
cao_osint/services/__init__.py
cao_osint/services/blog_record.py
cao_osint/services/user.py
cao_osint/static/favicon.ico
cao_osint/static/pyramid-16x16.png
cao_osint/static/pyramid.png
cao_osint/static/theme.css
cao_osint/static/uploads/dolibarr-psw.txt
cao_osint/templates/404.jinja2
cao_osint/templates/apropos.jinja2
cao_osint/templates/blog.jinja2
cao_osint/templates/blog_edit.jinja2
cao_osint/templates/blog_search.jinja2
cao_osint/templates/home.jinja2
cao_osint/templates/layout.jinja2
cao_osint/templates/login.jinja2
cao_osint/templates/tag_edit.jinja2
cao_osint/templates/tags.jinja2
cao_osint/templates/upload_edit.jinja2
cao_osint/templates/uploads.jinja2
cao_osint/templates/user_edit.jinja2
cao_osint/templates/users.jinja2
cao_osint/views/__init__.py
cao_osint/views/blog.py
cao_osint/views/default.py
cao_osint/views/notfound.py

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1,5 @@
[console_scripts]
initialize_cao_osint_db = cao_osint.scripts.initialize_db:main
[paste.app_factory]
main = cao_osint:main

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1,22 @@
plaster_pastedeploy
pyramid
pyramid_jinja2
pyramid_debugtoolbar
waitress
alembic
pyramid_retry
pyramid_layout
pyramid_tm
python-magic
SQLAlchemy
transaction
zope.sqlalchemy
wtforms
webhelpers2
passlib
markdown
[testing]
WebTest>=1.3.1
pytest>=3.7.4
pytest-cov

View File

@@ -0,0 +1 @@
cao_osint

Binary file not shown.

View File

@@ -29,12 +29,12 @@
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="{{ request.route_url('home') }}">CAO Blogr</a>
<a class="navbar-brand" href="{{ request.route_url('home') }}">CAOSInt</a>
</div>
<div class="collapse navbar-collapse" id="myNavbar">
<ul class="nav navbar-nav navbar-right">
<li><a href="{{ request.route_url('blog_search') }}"><span class="glyphicon glyphicon-search"></span></a></li>
{% if request.authenticated_userid %}
<li><a href="{{ request.route_url('blog_search') }}"><span class="glyphicon glyphicon-search"></span></a></li>
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">{{request.authenticated_userid}}
<span class="caret"></span>

View File

@@ -6,8 +6,7 @@ from ..forms import BlogCreateForm, BlogUpdateForm, BlogSearchForm, TagForm
import markdown
import datetime #<- will be used to set default dates on models
@view_config(route_name='blog',
renderer='cao_osint:templates/blog.jinja2')
@view_config(route_name='blog', renderer='../templates/blog.jinja2', permission='view')
def blog(request):
# get post id from request
blog_id = request.matchdict['id']
@@ -29,7 +28,7 @@ def blog(request):
}
@view_config(route_name='blog_edit', renderer='cao_osint:templates/blog_edit.jinja2', permission='view')
@view_config(route_name='blog_edit', renderer='../templates/blog_edit.jinja2', permission='view')
def blog_edit(request):
# get post id from request
blog_id = request.matchdict['id']
@@ -87,8 +86,7 @@ def blog_edit(request):
'entry': entry, }
@view_config(route_name='blog_search',
renderer='cao_osint:templates/blog_search.jinja2')
@view_config(route_name='blog_search', renderer='../templates/blog_search.jinja2', permission='view')
def blog_search(request):
criteria = ''
@@ -106,7 +104,7 @@ def blog_search(request):
'criteria': criteria,
}
@view_config(route_name='tags', renderer='cao_osint:templates/tags.jinja2', permission='view')
@view_config(route_name='tags', renderer='../templates/tags.jinja2', permission='view')
def tags(request):
# get the list of tags of this topic
@@ -117,7 +115,7 @@ def tags(request):
'tags': tags,
}
@view_config(route_name='tag_edit', renderer='cao_osint:templates/tag_edit.jinja2', permission='view')
@view_config(route_name='tag_edit', renderer='../templates/tag_edit.jinja2', permission='view')
def tag_edit(request):
# get tag parameters from request
tag_id = request.matchdict['id']

View File

@@ -13,8 +13,7 @@ import os
import shutil
import magic
@view_config(route_name='home',
renderer='cao_osint:templates/home.jinja2')
@view_config(route_name='home', renderer='../templates/home.jinja2', permission='view')
def home(request):
# get the last created posts
last_ten = BlogRecordService.get_last_created(request)
@@ -23,15 +22,14 @@ def home(request):
form = BlogSearchForm(request.POST)
return {
'page_title': "Bienvenue sur mon blog",
'page_title': "",
'last_ten': last_ten,
'form': form,
'criteria': criteria,
}
@view_config(route_name='apropos',
renderer='cao_osint:templates/apropos.jinja2')
@view_config(route_name='apropos', renderer='../templates/apropos.jinja2')
def apropos(request):
return {
@@ -39,8 +37,8 @@ def apropos(request):
}
@view_config(route_name='login', renderer='cao_osint:templates/login.jinja2')
@forbidden_view_config(renderer='cao_osint:templates/login.jinja2')
@view_config(route_name='login', renderer='../templates/login.jinja2')
@forbidden_view_config(renderer='../templates/login.jinja2')
def login(request):
username = ''
login_url = request.route_url('login')
@@ -77,7 +75,7 @@ def logout(request):
return HTTPFound(location=request.route_url('home'), headers=headers)
@view_config(route_name='users', renderer='cao_osint:templates/users.jinja2', permission='manage')
@view_config(route_name='users', renderer='../templates/users.jinja2', permission='manage')
def users(request):
# get all users
users = UserService.all(request)
@@ -87,7 +85,7 @@ def users(request):
}
@view_config(route_name='user_edit', renderer='cao_osint:templates/user_edit.jinja2', permission='view')
@view_config(route_name='user_edit', renderer='../templates/user_edit.jinja2', permission='view')
def user_edit(request):
message = ''
name = request.matchdict['name']
@@ -154,7 +152,7 @@ def user_edit(request):
}
@view_config(route_name='uploads', renderer='cao_osint:templates/uploads.jinja2', permission='view')
@view_config(route_name='uploads', renderer='../templates/uploads.jinja2', permission='view')
def uploads(request):
message = ''
folder_path = request.registry.settings['uploads_dir']
@@ -163,7 +161,7 @@ def uploads(request):
# récupérer tous les fichiers contenus dans dossier static/uploads
for f in os.scandir(folder_path):
file = []
file_url = request.static_url('cao_osint:static/uploads/') + f.name
file_url = request.static_url('../static/uploads/') + f.name
file_path = folder_path + f.name
file.append(f.name)
file.append('%s Ko' % round(os.path.getsize(file_path) / 1024))
@@ -214,7 +212,7 @@ def uploads(request):
}
@view_config(route_name='upload_edit', renderer='cao_osint:templates/upload_edit.jinja2')
@view_config(route_name='upload_edit', renderer='../templates/upload_edit.jinja2', permission='view')
def upload_edit(request):
filename = request.matchdict['filename']
@@ -240,6 +238,6 @@ def upload_edit(request):
'page_title': "Modifier : " + filename,
'message': message,
'filename': filename,
'file_url': request.static_url('cao_osint:static/uploads/') + filename,
'file_url': request.static_url('../static/uploads/') + filename,
}