| 
																	
																	
																		
																			
																		
																	
																	
																 | 
																@ -2,6 +2,8 @@ from datetime import datetime | 
															
														
														
													
														
															
																 | 
																 | 
																import hashlib | 
																 | 
																 | 
																import hashlib | 
															
														
														
													
														
															
																 | 
																 | 
																from werkzeug.security import generate_password_hash, check_password_hash | 
																 | 
																 | 
																from werkzeug.security import generate_password_hash, check_password_hash | 
															
														
														
													
														
															
																 | 
																 | 
																from itsdangerous import TimedJSONWebSignatureSerializer as Serializer | 
																 | 
																 | 
																from itsdangerous import TimedJSONWebSignatureSerializer as Serializer | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																from markdown import markdown | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																import bleach | 
															
														
														
													
														
															
																 | 
																 | 
																from itsdangerous import BadSignature | 
																 | 
																 | 
																from itsdangerous import BadSignature | 
															
														
														
													
														
															
																 | 
																 | 
																from flask import current_app | 
																 | 
																 | 
																from flask import current_app | 
															
														
														
													
														
															
																 | 
																 | 
																from flask_login import UserMixin, AnonymousUserMixin | 
																 | 
																 | 
																from flask_login import UserMixin, AnonymousUserMixin | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																			
																		
																	
																	
																		
																			
																		
																	
																	
																 | 
																@ -191,9 +193,22 @@ class Post(db.Model): | 
															
														
														
													
														
															
																 | 
																 | 
																    __tablename__ = 'posts' | 
																 | 
																 | 
																    __tablename__ = 'posts' | 
															
														
														
													
														
															
																 | 
																 | 
																    id = db.Column(db.Integer, primary_key=True) | 
																 | 
																 | 
																    id = db.Column(db.Integer, primary_key=True) | 
															
														
														
													
														
															
																 | 
																 | 
																    body = db.Column(db.Text) | 
																 | 
																 | 
																    body = db.Column(db.Text) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    body_html = db.Column(db.Text) | 
															
														
														
													
														
															
																 | 
																 | 
																    timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow) | 
																 | 
																 | 
																    timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow) | 
															
														
														
													
														
															
																 | 
																 | 
																    author_id = db.Column(db.Integer, db.ForeignKey('users.id')) | 
																 | 
																 | 
																    author_id = db.Column(db.Integer, db.ForeignKey('users.id')) | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    @staticmethod | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    def on_changed_body(target, value, oldvalue, initiator): | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        allowed_tags = ['a', 'abbr', 'acronym', 'b', 'blockquote', 'code', | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                        'em', 'i', 'li', 'ol', 'pre', 'strong', 'ul', | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                        'h1', 'h2', 'h3', 'p'] | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        md = markdown(value, output_format='html') | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        clean_md = bleach.clean(md, tags=allowed_tags, strip=True) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        target.body_html = bleach.linkify(clean_md) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																db.event.listen(Post.body, 'set', Post.on_changed_body) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																class AnonymousUser(AnonymousUserMixin): | 
																 | 
																 | 
																class AnonymousUser(AnonymousUserMixin): | 
															
														
														
													
														
															
																 | 
																 | 
																    def can(self, perm): | 
																 | 
																 | 
																    def can(self, perm): | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																			
																		
																	
																	
																	
																 | 
																
  |