| 
									
										
										
										
											2023-05-15 08:51:32 +08:00
										 |  |  | # -*- coding:utf-8 -*- | 
					
						
							|  |  |  | from functools import wraps | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from flask import current_app, abort | 
					
						
							|  |  |  | from flask_login import current_user | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from controllers.console.workspace.error import AccountNotInitializedError | 
					
						
							| 
									
										
										
										
											2023-12-20 15:37:57 +08:00
										 |  |  | from services.feature_service import FeatureService | 
					
						
							| 
									
										
										
										
											2023-05-15 08:51:32 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def account_initialization_required(view): | 
					
						
							|  |  |  |     @wraps(view) | 
					
						
							|  |  |  |     def decorated(*args, **kwargs): | 
					
						
							|  |  |  |         # check account initialization | 
					
						
							|  |  |  |         account = current_user | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if account.status == 'uninitialized': | 
					
						
							|  |  |  |             raise AccountNotInitializedError() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return view(*args, **kwargs) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return decorated | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def only_edition_cloud(view): | 
					
						
							|  |  |  |     @wraps(view) | 
					
						
							|  |  |  |     def decorated(*args, **kwargs): | 
					
						
							|  |  |  |         if current_app.config['EDITION'] != 'CLOUD': | 
					
						
							|  |  |  |             abort(404) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return view(*args, **kwargs) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return decorated | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def only_edition_self_hosted(view): | 
					
						
							|  |  |  |     @wraps(view) | 
					
						
							|  |  |  |     def decorated(*args, **kwargs): | 
					
						
							|  |  |  |         if current_app.config['EDITION'] != 'SELF_HOSTED': | 
					
						
							|  |  |  |             abort(404) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return view(*args, **kwargs) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return decorated | 
					
						
							| 
									
										
										
										
											2023-12-05 16:53:55 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def cloud_edition_billing_resource_check(resource: str, | 
					
						
							|  |  |  |                                          error_msg: str = "You have reached the limit of your subscription."): | 
					
						
							|  |  |  |     def interceptor(view): | 
					
						
							|  |  |  |         @wraps(view) | 
					
						
							|  |  |  |         def decorated(*args, **kwargs): | 
					
						
							| 
									
										
										
										
											2023-12-20 15:37:57 +08:00
										 |  |  |             features = FeatureService.get_features(current_user.current_tenant_id) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             if features.billing.enabled: | 
					
						
							|  |  |  |                 members = features.members | 
					
						
							|  |  |  |                 apps = features.apps | 
					
						
							|  |  |  |                 vector_space = features.vector_space | 
					
						
							|  |  |  |                 annotation_quota_limit = features.annotation_quota_limit | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 if resource == 'members' and 0 < members.limit <= members.size: | 
					
						
							| 
									
										
										
										
											2023-12-05 16:53:55 +08:00
										 |  |  |                     abort(403, error_msg) | 
					
						
							| 
									
										
										
										
											2023-12-20 15:37:57 +08:00
										 |  |  |                 elif resource == 'apps' and 0 < apps.limit <= apps.size: | 
					
						
							| 
									
										
										
										
											2023-12-05 16:53:55 +08:00
										 |  |  |                     abort(403, error_msg) | 
					
						
							| 
									
										
										
										
											2023-12-20 15:37:57 +08:00
										 |  |  |                 elif resource == 'vector_space' and 0 < vector_space.limit <= vector_space.size: | 
					
						
							| 
									
										
										
										
											2023-12-05 16:53:55 +08:00
										 |  |  |                     abort(403, error_msg) | 
					
						
							| 
									
										
										
										
											2023-12-20 15:37:57 +08:00
										 |  |  |                 elif resource == 'workspace_custom' and not features.can_replace_logo: | 
					
						
							| 
									
										
										
										
											2023-12-18 16:25:37 +08:00
										 |  |  |                     abort(403, error_msg) | 
					
						
							| 
									
										
										
										
											2023-12-20 15:37:57 +08:00
										 |  |  |                 elif resource == 'annotation' and 0 < annotation_quota_limit.limit < annotation_quota_limit.size: | 
					
						
							| 
									
										
										
										
											2023-12-18 13:10:05 +08:00
										 |  |  |                     abort(403, error_msg) | 
					
						
							| 
									
										
										
										
											2023-12-05 16:53:55 +08:00
										 |  |  |                 else: | 
					
						
							|  |  |  |                     return view(*args, **kwargs) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             return view(*args, **kwargs) | 
					
						
							|  |  |  |         return decorated | 
					
						
							|  |  |  |     return interceptor | 
					
						
							|  |  |  | 
 |