[FL-3246] fbt, ufbt: added checks for appid in app manifests(#2720)
Co-authored-by: あく <alleteam@gmail.com>
This commit is contained in:
		
							parent
							
								
									6f6ead1726
								
							
						
					
					
						commit
						754e640c8d
					
				| @ -1,7 +1,8 @@ | |||||||
| import os | import os | ||||||
|  | import re | ||||||
| from dataclasses import dataclass, field | from dataclasses import dataclass, field | ||||||
| from enum import Enum | from enum import Enum | ||||||
| from typing import Callable, List, Optional, Tuple, Union | from typing import Callable, ClassVar, List, Optional, Tuple, Union | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class FlipperManifestException(Exception): | class FlipperManifestException(Exception): | ||||||
| @ -23,6 +24,8 @@ class FlipperAppType(Enum): | |||||||
| 
 | 
 | ||||||
| @dataclass | @dataclass | ||||||
| class FlipperApplication: | class FlipperApplication: | ||||||
|  |     APP_ID_REGEX: ClassVar[re.Pattern] = re.compile(r"^[a-z0-9_]+$") | ||||||
|  | 
 | ||||||
|     @dataclass |     @dataclass | ||||||
|     class ExternallyBuiltFile: |     class ExternallyBuiltFile: | ||||||
|         path: str |         path: str | ||||||
| @ -84,6 +87,10 @@ class FlipperApplication: | |||||||
|     def __post_init__(self): |     def __post_init__(self): | ||||||
|         if self.apptype == FlipperAppType.PLUGIN: |         if self.apptype == FlipperAppType.PLUGIN: | ||||||
|             self.stack_size = 0 |             self.stack_size = 0 | ||||||
|  |         if not self.APP_ID_REGEX.match(self.appid): | ||||||
|  |             raise FlipperManifestException( | ||||||
|  |                 f"Invalid appid '{self.appid}'. Must match regex '{self.APP_ID_REGEX}'" | ||||||
|  |             ) | ||||||
|         if isinstance(self.fap_version, str): |         if isinstance(self.fap_version, str): | ||||||
|             try: |             try: | ||||||
|                 self.fap_version = tuple(int(v) for v in self.fap_version.split(".")) |                 self.fap_version = tuple(int(v) for v in self.fap_version.split(".")) | ||||||
|  | |||||||
| @ -75,7 +75,7 @@ from fbt.util import ( | |||||||
|     wrap_tempfile, |     wrap_tempfile, | ||||||
|     path_as_posix, |     path_as_posix, | ||||||
| ) | ) | ||||||
| from fbt.appmanifest import FlipperAppType | from fbt.appmanifest import FlipperAppType, FlipperApplication | ||||||
| from fbt.sdk.cache import SdkCache | from fbt.sdk.cache import SdkCache | ||||||
| 
 | 
 | ||||||
| # Base environment with all tools loaded from SDK | # Base environment with all tools loaded from SDK | ||||||
| @ -410,6 +410,12 @@ dist_env.Alias("vscode_dist", vscode_dist) | |||||||
| # Creating app from base template | # Creating app from base template | ||||||
| 
 | 
 | ||||||
| dist_env.SetDefault(FBT_APPID=appenv.subst("$APPID") or "template") | dist_env.SetDefault(FBT_APPID=appenv.subst("$APPID") or "template") | ||||||
|  | if fbt_appid := dist_env.subst("$FBT_APPID"): | ||||||
|  |     if not FlipperApplication.APP_ID_REGEX.match(fbt_appid): | ||||||
|  |         raise UserError( | ||||||
|  |             f"Invalid app id '{fbt_appid}'. App id must match {FlipperApplication.APP_ID_REGEX.pattern}" | ||||||
|  |         ) | ||||||
|  | 
 | ||||||
| app_template_dir = project_template_dir.Dir("app_template") | app_template_dir = project_template_dir.Dir("app_template") | ||||||
| app_template_dist = [] | app_template_dist = [] | ||||||
| for template_file in app_template_dir.glob("*"): | for template_file in app_template_dir.glob("*"): | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 hedger
						hedger