mirror of
				https://github.com/janeczku/calibre-web
				synced 2025-10-31 15:23:02 +00:00 
			
		
		
		
	Merge remote-tracking branch 'tags_restrict/master' into Develop
This commit is contained in:
		
							
								
								
									
										8
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -7,9 +7,11 @@ __pycache__/ | |||||||
| # Distribution / packaging | # Distribution / packaging | ||||||
| .Python | .Python | ||||||
| env/ | env/ | ||||||
|  | venv/ | ||||||
| eggs/ | eggs/ | ||||||
| dist/ | dist/ | ||||||
| build/ | build/ | ||||||
|  | vendor/ | ||||||
| .eggs/ | .eggs/ | ||||||
| *.egg-info/ | *.egg-info/ | ||||||
| .installed.cfg | .installed.cfg | ||||||
| @@ -19,16 +21,12 @@ build/ | |||||||
| # calibre-web | # calibre-web | ||||||
| *.db | *.db | ||||||
| *.log | *.log | ||||||
| config.ini |  | ||||||
| cps/static/[0-9]* |  | ||||||
|  |  | ||||||
| .idea/ | .idea/ | ||||||
| *.bak | *.bak | ||||||
| *.log.* | *.log.* | ||||||
| tags |  | ||||||
|  |  | ||||||
| settings.yaml | settings.yaml | ||||||
| gdrive_credentials | gdrive_credentials | ||||||
|  |  | ||||||
| vendor |  | ||||||
| client_secrets.json | client_secrets.json | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										28
									
								
								cps/admin.py
									
									
									
									
									
								
							
							
						
						
									
										28
									
								
								cps/admin.py
									
									
									
									
									
								
							| @@ -144,7 +144,10 @@ def configuration(): | |||||||
| def view_configuration(): | def view_configuration(): | ||||||
|     readColumn = db.session.query(db.Custom_Columns)\ |     readColumn = db.session.query(db.Custom_Columns)\ | ||||||
|             .filter(and_(db.Custom_Columns.datatype == 'bool',db.Custom_Columns.mark_for_delete == 0)).all() |             .filter(and_(db.Custom_Columns.datatype == 'bool',db.Custom_Columns.mark_for_delete == 0)).all() | ||||||
|  |     restrictColumns= db.session.query(db.Custom_Columns)\ | ||||||
|  |             .filter(and_(db.Custom_Columns.datatype == 'text',db.Custom_Columns.mark_for_delete == 0)).all() | ||||||
|     return render_title_template("config_view_edit.html", conf=config, readColumns=readColumn, |     return render_title_template("config_view_edit.html", conf=config, readColumns=readColumn, | ||||||
|  |                                  restrictColumns=restrictColumns, | ||||||
|                                  title=_(u"UI Configuration"), page="uiconfig") |                                  title=_(u"UI Configuration"), page="uiconfig") | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -160,7 +163,7 @@ def update_view_configuration(): | |||||||
|  |  | ||||||
|     _config_string("config_calibre_web_title") |     _config_string("config_calibre_web_title") | ||||||
|     _config_string("config_columns_to_ignore") |     _config_string("config_columns_to_ignore") | ||||||
|     _config_string("config_mature_content_tags") |     # _config_string("config_mature_content_tags") | ||||||
|     reboot_required |= _config_string("config_title_regex") |     reboot_required |= _config_string("config_title_regex") | ||||||
|  |  | ||||||
|     _config_int("config_read_column") |     _config_int("config_read_column") | ||||||
| @@ -169,6 +172,10 @@ def update_view_configuration(): | |||||||
|     _config_int("config_books_per_page") |     _config_int("config_books_per_page") | ||||||
|     _config_int("config_authors_max") |     _config_int("config_authors_max") | ||||||
|  |  | ||||||
|  |     _config_string("config_restricted_tags") | ||||||
|  |     _config_int("config_restricted_column") | ||||||
|  |     _config_string("config_restricted_column_value") | ||||||
|  |  | ||||||
|     if config.config_google_drive_watch_changes_response: |     if config.config_google_drive_watch_changes_response: | ||||||
|         config.config_google_drive_watch_changes_response = json.dumps(config.config_google_drive_watch_changes_response) |         config.config_google_drive_watch_changes_response = json.dumps(config.config_google_drive_watch_changes_response) | ||||||
|  |  | ||||||
| @@ -176,8 +183,8 @@ def update_view_configuration(): | |||||||
|     config.config_default_role &= ~constants.ROLE_ANONYMOUS |     config.config_default_role &= ~constants.ROLE_ANONYMOUS | ||||||
|  |  | ||||||
|     config.config_default_show = sum(int(k[5:]) for k in to_save if k.startswith('show_')) |     config.config_default_show = sum(int(k[5:]) for k in to_save if k.startswith('show_')) | ||||||
|     if "Show_mature_content" in to_save: |     '''if "Show_mature_content" in to_save: | ||||||
|         config.config_default_show |= constants.MATURE_CONTENT |         config.config_default_show |= constants.MATURE_CONTENT''' | ||||||
|  |  | ||||||
|     config.save() |     config.save() | ||||||
|     flash(_(u"Calibre-Web configuration updated"), category="success") |     flash(_(u"Calibre-Web configuration updated"), category="success") | ||||||
| @@ -448,7 +455,7 @@ def new_user(): | |||||||
|     if request.method == "POST": |     if request.method == "POST": | ||||||
|         to_save = request.form.to_dict() |         to_save = request.form.to_dict() | ||||||
|         content.default_language = to_save["default_language"] |         content.default_language = to_save["default_language"] | ||||||
|         content.mature_content = "Show_mature_content" in to_save |         # content.mature_content = "Show_mature_content" in to_save | ||||||
|         content.locale = to_save.get("locale", content.locale) |         content.locale = to_save.get("locale", content.locale) | ||||||
|  |  | ||||||
|         content.sidebar_view = sum(int(key[5:]) for key in to_save if key.startswith('show_')) |         content.sidebar_view = sum(int(key[5:]) for key in to_save if key.startswith('show_')) | ||||||
| @@ -490,7 +497,10 @@ def new_user(): | |||||||
|     else: |     else: | ||||||
|         content.role = config.config_default_role |         content.role = config.config_default_role | ||||||
|         content.sidebar_view = config.config_default_show |         content.sidebar_view = config.config_default_show | ||||||
|         content.mature_content = bool(config.config_default_show & constants.MATURE_CONTENT) |         content.restricted_tags = config.config_restricted_tags | ||||||
|  |         content.restricted_column = config.config_restricted_column | ||||||
|  |         content.restricted_column_value = config.config_restricted_column_value | ||||||
|  |         # content.mature_content = bool(config.config_default_show & constants.MATURE_CONTENT) | ||||||
|     return render_title_template("user_edit.html", new_user=1, content=content, translations=translations, |     return render_title_template("user_edit.html", new_user=1, content=content, translations=translations, | ||||||
|                                  languages=languages, title=_(u"Add new user"), page="newuser", |                                  languages=languages, title=_(u"Add new user"), page="newuser", | ||||||
|                                  registered_oauth=oauth_check) |                                  registered_oauth=oauth_check) | ||||||
| @@ -593,7 +603,13 @@ def edit_user(user_id): | |||||||
|             else: |             else: | ||||||
|                 content.sidebar_view &= ~constants.DETAIL_RANDOM |                 content.sidebar_view &= ~constants.DETAIL_RANDOM | ||||||
|  |  | ||||||
|             content.mature_content = "Show_mature_content" in to_save |             # content.mature_content = "Show_mature_content" in to_save | ||||||
|  |             if "restricted_tags" in to_save: | ||||||
|  |                 content.restricted_tags = to_save["restricted_tags"] | ||||||
|  |             if "config_restricted_column" in to_save: | ||||||
|  |                 content.restricted_tags = to_save["config_restricted_column"] | ||||||
|  |             if "config_restricted_column_value" in to_save: | ||||||
|  |                 content.restricted_tags = to_save["config_restricted_column_value"] | ||||||
|  |  | ||||||
|             if "default_language" in to_save: |             if "default_language" in to_save: | ||||||
|                 content.default_language = to_save["default_language"] |                 content.default_language = to_save["default_language"] | ||||||
|   | |||||||
| @@ -57,7 +57,7 @@ class _Settings(_Base): | |||||||
|     config_authors_max = Column(Integer, default=0) |     config_authors_max = Column(Integer, default=0) | ||||||
|     config_read_column = Column(Integer, default=0) |     config_read_column = Column(Integer, default=0) | ||||||
|     config_title_regex = Column(String, default=u'^(A|The|An|Der|Die|Das|Den|Ein|Eine|Einen|Dem|Des|Einem|Eines)\s+') |     config_title_regex = Column(String, default=u'^(A|The|An|Der|Die|Das|Den|Ein|Eine|Einen|Dem|Des|Einem|Eines)\s+') | ||||||
|     config_mature_content_tags = Column(String, default='') |     # config_mature_content_tags = Column(String, default='') | ||||||
|     config_theme = Column(Integer, default=0) |     config_theme = Column(Integer, default=0) | ||||||
|  |  | ||||||
|     config_log_level = Column(SmallInteger, default=logger.DEFAULT_LOG_LEVEL) |     config_log_level = Column(SmallInteger, default=logger.DEFAULT_LOG_LEVEL) | ||||||
| @@ -70,10 +70,13 @@ class _Settings(_Base): | |||||||
|     config_public_reg = Column(SmallInteger, default=0) |     config_public_reg = Column(SmallInteger, default=0) | ||||||
|     config_remote_login = Column(Boolean, default=False) |     config_remote_login = Column(Boolean, default=False) | ||||||
|  |  | ||||||
|  |  | ||||||
|     config_default_role = Column(SmallInteger, default=0) |     config_default_role = Column(SmallInteger, default=0) | ||||||
|     config_default_show = Column(SmallInteger, default=6143) |     config_default_show = Column(SmallInteger, default=6143) | ||||||
|     config_columns_to_ignore = Column(String) |     config_columns_to_ignore = Column(String) | ||||||
|  |     config_restricted_tags = Column(String) | ||||||
|  |     config_restricted_column = Column(SmallInteger, default=0) | ||||||
|  |     config_restricted_column_value = Column(String) | ||||||
|  |     config_allowed_column_value = Column(String) | ||||||
|  |  | ||||||
|     config_use_google_drive = Column(Boolean, default=False) |     config_use_google_drive = Column(Boolean, default=False) | ||||||
|     config_google_drive_folder = Column(String) |     config_google_drive_folder = Column(String) | ||||||
| @@ -177,12 +180,12 @@ class _ConfigSQL(object): | |||||||
|     def show_detail_random(self): |     def show_detail_random(self): | ||||||
|         return self.show_element_new_user(constants.DETAIL_RANDOM) |         return self.show_element_new_user(constants.DETAIL_RANDOM) | ||||||
|  |  | ||||||
|     def show_mature_content(self): |     '''def show_mature_content(self): | ||||||
|         return self.show_element_new_user(constants.MATURE_CONTENT) |         return self.show_element_new_user(constants.MATURE_CONTENT)''' | ||||||
|  |  | ||||||
|     def mature_content_tags(self): |     '''def mature_content_tags(self): | ||||||
|         mct = self.config_mature_content_tags.split(",") |         mct = self.config_mature_content_tags.split(",") | ||||||
|         return [t.strip() for t in mct] |         return [t.strip() for t in mct]''' | ||||||
|  |  | ||||||
|     def get_log_level(self): |     def get_log_level(self): | ||||||
|         return logger.get_level_name(self.config_log_level) |         return logger.get_level_name(self.config_log_level) | ||||||
|   | |||||||
| @@ -686,14 +686,36 @@ def common_filters(): | |||||||
|         lang_filter = db.Books.languages.any(db.Languages.lang_code == current_user.filter_language()) |         lang_filter = db.Books.languages.any(db.Languages.lang_code == current_user.filter_language()) | ||||||
|     else: |     else: | ||||||
|         lang_filter = true() |         lang_filter = true() | ||||||
|     content_rating_filter = false() if current_user.mature_content else \ |     negtags_list = current_user.list_restricted_tags() | ||||||
|         db.Books.tags.any(db.Tags.name.in_(config.mature_content_tags())) |     postags_list = current_user.list_allowed_tags() | ||||||
|     return and_(lang_filter, ~content_rating_filter) |     neg_content_tags_filter = false() if negtags_list == [''] else db.Books.tags.any(db.Tags.name.in_(negtags_list)) | ||||||
|  |     pos_content_tags_filter = true() if postags_list == [''] else db.Books.tags.any(db.Tags.name.in_(postags_list)) | ||||||
|  |     # db.session.query(db.Books).filter(db.Books.custom_column_5.any(db.cc_classes[5].value == 'nikto')).first() | ||||||
|  |     # db.session.query(db.Books).filter( | ||||||
|  |     #    getattr(db.Books, 'custom_column_' + str(5)).any(db.cc_classes[5].value == 'nikto').first()) | ||||||
|  |     if config.config_restricted_column: | ||||||
|  |         pos_cc_list = current_user.allowed_column_value.split(',') | ||||||
|  |         pos_content_cc_filter = true() if pos_cc_list == [''] else \ | ||||||
|  |             getattr(db.Books, 'custom_column_' + str(config.config_restricted_column)).\ | ||||||
|  |                 any(db.cc_classes[config.config_restricted_column].value.in_(pos_cc_list)) | ||||||
|  |         neg_cc_list = current_user.restricted_column_value.split(',') | ||||||
|  |         neg_content_cc_filter = true() if neg_cc_list == [''] else \ | ||||||
|  |             getattr(db.Books, 'custom_column_' + str(config.config_restricted_column)).\ | ||||||
|  |                 any(db.cc_classes[config.config_restricted_column].value.in_(neg_cc_list)) | ||||||
|  |     else: | ||||||
|  |         pos_content_cc_filter = true() | ||||||
|  |         neg_content_cc_filter = false() | ||||||
|  |     return and_(lang_filter, pos_content_tags_filter, ~neg_content_tags_filter, | ||||||
|  |                 pos_content_cc_filter, ~neg_content_cc_filter) | ||||||
|  |  | ||||||
|  |  | ||||||
| def tags_filters(): | def tags_filters(): | ||||||
|     return ~(false() if current_user.mature_content else \ |     negtags_list = current_user.list_restricted_tags() | ||||||
|         db.Tags.name.in_(config.mature_content_tags())) |     postags_list = current_user.list_allowed_tags() | ||||||
|     # return db.session.query(db.Tags).filter(~content_rating_filter).order_by(db.Tags.name).all() |     neg_content_tags_filter = false() if negtags_list == [''] else db.Tags.name.in_(negtags_list) | ||||||
|  |     pos_content_tags_filter = true() if postags_list == [''] else db.Tags.name.in_(postags_list) | ||||||
|  |     return and_(pos_content_tags_filter, ~neg_content_tags_filter) | ||||||
|  |     # return ~(false()) if postags_list == [''] else db.Tags.in_(postags_list) | ||||||
|  |  | ||||||
|  |  | ||||||
| # Creates for all stored languages a translated speaking name in the array for the UI | # Creates for all stored languages a translated speaking name in the array for the UI | ||||||
|   | |||||||
| @@ -71,7 +71,7 @@ | |||||||
|       </div> |       </div> | ||||||
|     </div> |     </div> | ||||||
|   </div> |   </div> | ||||||
|  |     {% if show_back_button %} | ||||||
|   <div class="panel panel-default"> |   <div class="panel panel-default"> | ||||||
|     <div class="panel-heading"> |     <div class="panel-heading"> | ||||||
|       <h4 class="panel-title"> |       <h4 class="panel-title"> | ||||||
| @@ -316,11 +316,14 @@ | |||||||
|       </div> |       </div> | ||||||
|     </div> |     </div> | ||||||
|   </div> |   </div> | ||||||
|  |   {% endif %} | ||||||
| </div> | </div> | ||||||
|  |  | ||||||
|  |  | ||||||
|     <div class="col-sm-12"> |     <div class="col-sm-12"> | ||||||
|  |     {% if not show_login_button %} | ||||||
|     <button type="submit" name="submit" class="btn btn-default">{{_('Submit')}}</button> |     <button type="submit" name="submit" class="btn btn-default">{{_('Submit')}}</button> | ||||||
|  |     {% endif %} | ||||||
|     {% if show_back_button %} |     {% if show_back_button %} | ||||||
|       <a href="{{ url_for('admin.admin') }}" class="btn btn-default">{{_('Back')}}</a> |       <a href="{{ url_for('admin.admin') }}" class="btn btn-default">{{_('Back')}}</a> | ||||||
|     {% endif %} |     {% endif %} | ||||||
|   | |||||||
| @@ -51,16 +51,19 @@ | |||||||
|                 {% endfor %} |                 {% endfor %} | ||||||
|               </select> |               </select> | ||||||
|         </div> |         </div> | ||||||
|  |         <div class="form-group"> | ||||||
|  |           <label for="config_restricted_column">{{_('View restriction based on Calibre column')}}</label> | ||||||
|  |               <select name="config_restricted_column" id="config_restricted_column" class="form-control"> | ||||||
|  |                 <option value="0" {% if conf.config_restricted_column == 0 %}selected{% endif %}>{{ _('None') }}</option> | ||||||
|  |                 {%  for restrictColumn in restrictColumns %} | ||||||
|  |                 <option value="{{ restrictColumn.id }}" {% if restrictColumn.id == conf.config_restricted_column %}selected{% endif %}>{{ restrictColumn.name }}</option> | ||||||
|  |                 {% endfor %} | ||||||
|  |               </select> | ||||||
|  |         </div> | ||||||
|         <div class="form-group"> |         <div class="form-group"> | ||||||
|           <label for="config_title_regex">{{_('Regular expression for title sorting')}}</label> |           <label for="config_title_regex">{{_('Regular expression for title sorting')}}</label> | ||||||
|           <input type="text" class="form-control" name="config_title_regex" id="config_title_regex" value="{% if conf.config_title_regex != None %}{{ conf.config_title_regex }}{% endif %}" autocomplete="off"> |           <input type="text" class="form-control" name="config_title_regex" id="config_title_regex" value="{% if conf.config_title_regex != None %}{{ conf.config_title_regex }}{% endif %}" autocomplete="off"> | ||||||
|         </div> |         </div> | ||||||
|         <div class="form-group"> |  | ||||||
|           <label for="config_mature_content_tags">{{_('Tags for Mature Content')}}</label> |  | ||||||
|           <input type="text" class="form-control" name="config_mature_content_tags" id="config_mature_content_tags" |  | ||||||
|                  value="{% if conf.config_mature_content_tags != None%}{{ conf.config_mature_content_tags }}{% endif %}" |  | ||||||
|                  autocomplete="off" |  | ||||||
|           > |  | ||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
|     </div> |     </div> | ||||||
| @@ -108,6 +111,14 @@ | |||||||
|           <input type="checkbox" name="edit_shelf_role" id="edit_shelf_role" {% if conf.role_edit_shelfs() %}checked{% endif %}> |           <input type="checkbox" name="edit_shelf_role" id="edit_shelf_role" {% if conf.role_edit_shelfs() %}checked{% endif %}> | ||||||
|           <label for="edit_shelf_role">{{_('Allow Editing Public Shelfs')}}</label> |           <label for="edit_shelf_role">{{_('Allow Editing Public Shelfs')}}</label> | ||||||
|         </div> |         </div> | ||||||
|  |         <div class="form-group"> | ||||||
|  |             <label for="config_restricted_tags">{{_('Restrict Tags')}}</label> | ||||||
|  |             <input type="text" class="form-control" name="config_restricted_tags" id="config_restricted_tags" value="{{ conf.config_restricted_tags if conf.config_restricted_tags != None }}" autocomplete="off"> | ||||||
|  |         </div> | ||||||
|  |         <div class="form-group"> | ||||||
|  |             <label for="config_restricted_column_value">{{_('Restricted Column Content')}}</label> | ||||||
|  |             <input type="text" class="form-control" name="config_restricted_column_value" id="config_restricted_column_value" value="{{ conf.config_restricted_column_value if conf.config_restricted_column_value != None }}" autocomplete="off"> | ||||||
|  |         </div> | ||||||
|       </div> |       </div> | ||||||
|     </div> |     </div> | ||||||
|   </div> |   </div> | ||||||
| @@ -134,14 +145,9 @@ | |||||||
|             <input type="checkbox" name="Show_detail_random" id="Show_detail_random" {% if conf.show_detail_random() %}checked{% endif %}> |             <input type="checkbox" name="Show_detail_random" id="Show_detail_random" {% if conf.show_detail_random() %}checked{% endif %}> | ||||||
|             <label for="Show_detail_random">{{_('Show random books in detail view')}}</label> |             <label for="Show_detail_random">{{_('Show random books in detail view')}}</label> | ||||||
|         </div> |         </div> | ||||||
|         <div class="form-group"> |  | ||||||
|             <input type="checkbox" name="Show_mature_content" id="Show_mature_content" {% if conf.show_mature_content() %}checked{% endif %}> |  | ||||||
|             <label for="Show_mature_content">{{_('Show mature content')}}</label> |  | ||||||
|         </div> |  | ||||||
|       </div> |       </div> | ||||||
|     </div> |     </div> | ||||||
|   </div> |   </div> | ||||||
| </div> |  | ||||||
|     <div class="col-sm-12"> |     <div class="col-sm-12"> | ||||||
|     <button type="submit" name="submit" class="btn btn-default">{{_('Submit')}}</button> |     <button type="submit" name="submit" class="btn btn-default">{{_('Submit')}}</button> | ||||||
|     <a href="{{ url_for('admin.admin') }}" class="btn btn-default">{{_('Back')}}</a> |     <a href="{{ url_for('admin.admin') }}" class="btn btn-default">{{_('Back')}}</a> | ||||||
|   | |||||||
| @@ -14,9 +14,9 @@ | |||||||
|       <input type="email" class="form-control" name="email" id="email" value="{{ content.email if content.email != None }}" autocomplete="off"> |       <input type="email" class="form-control" name="email" id="email" value="{{ content.email if content.email != None }}" autocomplete="off"> | ||||||
|     </div> |     </div> | ||||||
|     {% if ( g.user and g.user.role_passwd() or g.user.role_admin() ) and not content.role_anonymous() %} |     {% if ( g.user and g.user.role_passwd() or g.user.role_admin() ) and not content.role_anonymous() %} | ||||||
|       {% if g.user and g.user.role_admin() and g.allow_registration and not new_user and not profile %} |       {% if g.user and g.user.role_admin() and not new_user and not profile and ( mail_configured and content.email if content.email != None ) %} | ||||||
|         <div class="btn btn-default" id="resend_password"><a href="{{url_for('admin.reset_password', user_id = content.id) }}">{{_('Reset user Password')}}</a></div> |         <div class="btn btn-default" id="resend_password"><a href="{{url_for('admin.reset_user_password', user_id = content.id) }}">{{_('Reset user Password')}}</a></div> | ||||||
|       {% else %} |       {% endif %} | ||||||
|         <div class="form-group"> |         <div class="form-group"> | ||||||
|           <label for="password">{{_('Password')}}</label> |           <label for="password">{{_('Password')}}</label> | ||||||
|           <input type="password" class="form-control" name="password" id="password" value="" autocomplete="off"> |           <input type="password" class="form-control" name="password" id="password" value="" autocomplete="off"> | ||||||
| @@ -39,7 +39,14 @@ | |||||||
|             {% endfor %} |             {% endfor %} | ||||||
|         </select> |         </select> | ||||||
|     </div> |     </div> | ||||||
|  |     <div class="form-group"> | ||||||
|  |         <label for="restricted_tags">{{_('Restricted Tags')}}</label> | ||||||
|  |         <input type="text" class="form-control" name="restricted_tags" id="restricted_tags" value="{{ content.restricted_tags if content.restricted_tags != None }}" autocomplete="off"> | ||||||
|  |     </div> | ||||||
|  |     <div class="form-group"> | ||||||
|  |         <label for="restricted_column_value">{{_('Restricted Column Content')}}</label> | ||||||
|  |         <input type="text" class="form-control" name="restricted_column_value" id="restricted_column_value" value="{{ content.restricted_column_value if content.restricted_column_value != None }}" autocomplete="off"> | ||||||
|  |     </div> | ||||||
|     <div class="form-group"> |     <div class="form-group"> | ||||||
|       <label for="default_language">{{_('Show books with language')}}</label> |       <label for="default_language">{{_('Show books with language')}}</label> | ||||||
|         <select name="default_language" id="default_language" class="form-control"> |         <select name="default_language" id="default_language" class="form-control"> | ||||||
| @@ -49,7 +56,6 @@ | |||||||
|             {% endfor %} |             {% endfor %} | ||||||
|         </select> |         </select> | ||||||
|     </div> |     </div> | ||||||
|  |  | ||||||
|     {% if registered_oauth.keys()| length > 0 %} |     {% if registered_oauth.keys()| length > 0 %} | ||||||
|       {% for id, name in registered_oauth.items() %} |       {% for id, name in registered_oauth.items() %} | ||||||
|     <div class="form-group"> |     <div class="form-group"> | ||||||
| @@ -61,9 +67,7 @@ | |||||||
|         {% endif %} |         {% endif %} | ||||||
|       {% endfor %} |       {% endfor %} | ||||||
|     </div> |     </div> | ||||||
|  |  | ||||||
|     {% endif %} |     {% endif %} | ||||||
|  |  | ||||||
|     <div class="col-sm-6"> |     <div class="col-sm-6"> | ||||||
|         {% for element in sidebar %} |         {% for element in sidebar %} | ||||||
|           {% if element['config_show'] %} |           {% if element['config_show'] %} | ||||||
| @@ -87,10 +91,10 @@ | |||||||
|       <label for="admin_role">{{_('Admin user')}}</label> |       <label for="admin_role">{{_('Admin user')}}</label> | ||||||
|     </div> |     </div> | ||||||
|     {% endif %} |     {% endif %} | ||||||
|     <div class="form-group"> |     <!--div class="form-group"> | ||||||
|         <input type="checkbox" name="Show_mature_content" id="Show_mature_content" {% if content.mature_content %}checked{% endif %}> |         <input type="checkbox" name="Show_mature_content" id="Show_mature_content" {% if content.mature_content %}checked{% endif %}> | ||||||
|         <label for="Show_mature_content">{{_('Show mature content')}}</label> |         <label for="Show_mature_content">{{_('Show mature content')}}</label> | ||||||
|     </div> |     </div--> | ||||||
|     <div class="form-group"> |     <div class="form-group"> | ||||||
|       <input type="checkbox" name="download_role" id="download_role" {% if content.role_download() %}checked{% endif %}> |       <input type="checkbox" name="download_role" id="download_role" {% if content.role_download() %}checked{% endif %}> | ||||||
|       <label for="download_role">{{_('Allow Downloads')}}</label> |       <label for="download_role">{{_('Allow Downloads')}}</label> | ||||||
|   | |||||||
							
								
								
									
										49
									
								
								cps/ub.py
									
									
									
									
									
								
							
							
						
						
									
										49
									
								
								cps/ub.py
									
									
									
									
									
								
							| @@ -157,6 +157,27 @@ class UserBase: | |||||||
|     def show_detail_random(self): |     def show_detail_random(self): | ||||||
|         return self.check_visibility(constants.DETAIL_RANDOM) |         return self.check_visibility(constants.DETAIL_RANDOM) | ||||||
|  |  | ||||||
|  |     def list_restricted_tags(self): | ||||||
|  |         # return [line in (line.strip("," ) for line in self.restricted_tags.split(",") if not line.startswith('~'))] | ||||||
|  |         # return [line in (line.strip(",") for line in self.restricted_tags.split(",") if not line.startswith('~'))] | ||||||
|  |         #return [p.strip(",") for p in self.restricted_tags.split(",") if not(p.startswith(starter))] | ||||||
|  |         '''for line in self.restricted_tags.split(","): | ||||||
|  |             if not line.startswith('~'): | ||||||
|  |                 continue''' | ||||||
|  |         mct = self.restricted_tags.split(",") | ||||||
|  |         return [t.strip() for t in mct] | ||||||
|  |  | ||||||
|  |     def list_allowed_tags(self): | ||||||
|  |         # return [line in (line.strip("," ) for line in self.restricted_tags.split(",") if not line.startswith('~'))] | ||||||
|  |         # return [line in (line.strip(",") for line in self.restricted_tags.split(",") if not line.startswith('~'))] | ||||||
|  |         #return [p.strip(",") for p in self.restricted_tags.split(",") if not(p.startswith(starter))] | ||||||
|  |         '''for line in self.restricted_tags.split(","): | ||||||
|  |             if not line.startswith('~'): | ||||||
|  |                 continue''' | ||||||
|  |         mct = self.allowed_tags.split(",") | ||||||
|  |         return [t.strip() for t in mct] | ||||||
|  |  | ||||||
|  |  | ||||||
|     def __repr__(self): |     def __repr__(self): | ||||||
|         return '<User %r>' % self.nickname |         return '<User %r>' % self.nickname | ||||||
|  |  | ||||||
| @@ -178,7 +199,11 @@ class User(UserBase, Base): | |||||||
|     locale = Column(String(2), default="en") |     locale = Column(String(2), default="en") | ||||||
|     sidebar_view = Column(Integer, default=1) |     sidebar_view = Column(Integer, default=1) | ||||||
|     default_language = Column(String(3), default="all") |     default_language = Column(String(3), default="all") | ||||||
|     mature_content = Column(Boolean, default=True) |     # mature_content = Column(Boolean, default=True) | ||||||
|  |     restricted_tags = Column(String, default="") | ||||||
|  |     allowed_tags = Column(String, default="") | ||||||
|  |     restricted_column_value = Column(String, default="") | ||||||
|  |     allowed_column_value = Column(String, default="") | ||||||
|  |  | ||||||
|  |  | ||||||
| if oauth_support: | if oauth_support: | ||||||
| @@ -212,11 +237,13 @@ class Anonymous(AnonymousUserMixin, UserBase): | |||||||
|         self.sidebar_view = data.sidebar_view |         self.sidebar_view = data.sidebar_view | ||||||
|         self.default_language = data.default_language |         self.default_language = data.default_language | ||||||
|         self.locale = data.locale |         self.locale = data.locale | ||||||
|         self.mature_content = data.mature_content |         # self.mature_content = data.mature_content | ||||||
|         self.kindle_mail = data.kindle_mail |         self.kindle_mail = data.kindle_mail | ||||||
|  |         self.restricted_tags = data.restricted_tags | ||||||
|         # settings = session.query(config).first() |         self.allowed_tags = data.allowed_tags | ||||||
|         # self.anon_browse = settings.config_anonbrowse |         # self.restricted_column = data.restricted_column | ||||||
|  |         self.restricted_column_value = data.restricted_column_value | ||||||
|  |         self.allowed_column_value = data.allowed_column_value | ||||||
|  |  | ||||||
|     def role_admin(self): |     def role_admin(self): | ||||||
|         return False |         return False | ||||||
| @@ -370,11 +397,19 @@ def migrate_Database(session): | |||||||
|               'side_autor': constants.SIDEBAR_AUTHOR, |               'side_autor': constants.SIDEBAR_AUTHOR, | ||||||
|             'detail_random': constants.DETAIL_RANDOM}) |             'detail_random': constants.DETAIL_RANDOM}) | ||||||
|         session.commit() |         session.commit() | ||||||
|     try: |     '''try: | ||||||
|         session.query(exists().where(User.mature_content)).scalar() |         session.query(exists().where(User.mature_content)).scalar() | ||||||
|     except exc.OperationalError: |     except exc.OperationalError: | ||||||
|         conn = engine.connect() |         conn = engine.connect() | ||||||
|         conn.execute("ALTER TABLE user ADD column `mature_content` INTEGER DEFAULT 1") |         conn.execute("ALTER TABLE user ADD column `mature_content` INTEGER DEFAULT 1")''' | ||||||
|  |     try: | ||||||
|  |         session.query(exists().where(User.restricted_tags)).scalar() | ||||||
|  |     except exc.OperationalError:  # Database is not compatible, some columns are missing | ||||||
|  |         conn = engine.connect() | ||||||
|  |         conn.execute("ALTER TABLE user ADD column `restricted_tags` String DEFAULT ''") | ||||||
|  |         conn.execute("ALTER TABLE user ADD column `allowed_tags` String DEFAULT ''") | ||||||
|  |         conn.execute("ALTER TABLE user ADD column `restricted_column_value` DEFAULT ''") | ||||||
|  |         conn.execute("ALTER TABLE user ADD column `allowed_column_value` DEFAULT ''") | ||||||
|     if session.query(User).filter(User.role.op('&')(constants.ROLE_ANONYMOUS) == constants.ROLE_ANONYMOUS).first() is None: |     if session.query(User).filter(User.role.op('&')(constants.ROLE_ANONYMOUS) == constants.ROLE_ANONYMOUS).first() is None: | ||||||
|         create_anonymous_user(session) |         create_anonymous_user(session) | ||||||
|     try: |     try: | ||||||
|   | |||||||
| @@ -229,7 +229,6 @@ def edit_required(f): | |||||||
|  |  | ||||||
|     return inner |     return inner | ||||||
|  |  | ||||||
|  |  | ||||||
| # ################################### Helper functions ################################################################ | # ################################### Helper functions ################################################################ | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -1089,7 +1088,7 @@ def register(): | |||||||
|                 content.password = generate_password_hash(password) |                 content.password = generate_password_hash(password) | ||||||
|                 content.role = config.config_default_role |                 content.role = config.config_default_role | ||||||
|                 content.sidebar_view = config.config_default_show |                 content.sidebar_view = config.config_default_show | ||||||
|                 content.mature_content = bool(config.config_default_show & constants.MATURE_CONTENT) |                 #content.mature_content = bool(config.config_default_show & constants.MATURE_CONTENT) | ||||||
|                 try: |                 try: | ||||||
|                     ub.session.add(content) |                     ub.session.add(content) | ||||||
|                     ub.session.commit() |                     ub.session.commit() | ||||||
| @@ -1290,8 +1289,8 @@ def profile(): | |||||||
|                 current_user.password = generate_password_hash(to_save["password"]) |                 current_user.password = generate_password_hash(to_save["password"]) | ||||||
|         if "kindle_mail" in to_save and to_save["kindle_mail"] != current_user.kindle_mail: |         if "kindle_mail" in to_save and to_save["kindle_mail"] != current_user.kindle_mail: | ||||||
|             current_user.kindle_mail = to_save["kindle_mail"] |             current_user.kindle_mail = to_save["kindle_mail"] | ||||||
|         if "kobo_user_key" in to_save and to_save["kobo_user_key"]: |         if "allowed_tags" in to_save and to_save["allowed_tags"] != current_user.allowed_tags: | ||||||
|                 current_user.kobo_user_key_hash = generate_password_hash(to_save["kobo_user_key"]) |             current_user.allowed_tags = to_save["allowed_tags"].strip() | ||||||
|         if to_save["email"] and to_save["email"] != current_user.email: |         if to_save["email"] and to_save["email"] != current_user.email: | ||||||
|             if config.config_public_reg and not check_valid_domain(to_save["email"]): |             if config.config_public_reg and not check_valid_domain(to_save["email"]): | ||||||
|                 flash(_(u"E-mail is not from valid domain"), category="error") |                 flash(_(u"E-mail is not from valid domain"), category="error") | ||||||
| @@ -1329,7 +1328,7 @@ def profile(): | |||||||
|         if "Show_detail_random" in to_save: |         if "Show_detail_random" in to_save: | ||||||
|             current_user.sidebar_view += constants.DETAIL_RANDOM |             current_user.sidebar_view += constants.DETAIL_RANDOM | ||||||
|  |  | ||||||
|         current_user.mature_content = "Show_mature_content" in to_save |         #current_user.mature_content = "Show_mature_content" in to_save | ||||||
|  |  | ||||||
|         try: |         try: | ||||||
|             ub.session.commit() |             ub.session.commit() | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Ozzieisaacs
					Ozzieisaacs