[FL-3246] fbt, ufbt: added checks for appid in app manifests(#2720)

Co-authored-by: あく <alleteam@gmail.com>
This commit is contained in:
hedger 2023-06-07 06:14:33 +04:00 committed by GitHub
parent 6f6ead1726
commit 754e640c8d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 15 additions and 2 deletions

View file

@ -1,7 +1,8 @@
import os
import re
from dataclasses import dataclass, field
from enum import Enum
from typing import Callable, List, Optional, Tuple, Union
from typing import Callable, ClassVar, List, Optional, Tuple, Union
class FlipperManifestException(Exception):
@ -23,6 +24,8 @@ class FlipperAppType(Enum):
@dataclass
class FlipperApplication:
APP_ID_REGEX: ClassVar[re.Pattern] = re.compile(r"^[a-z0-9_]+$")
@dataclass
class ExternallyBuiltFile:
path: str
@ -84,6 +87,10 @@ class FlipperApplication:
def __post_init__(self):
if self.apptype == FlipperAppType.PLUGIN:
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):
try:
self.fap_version = tuple(int(v) for v in self.fap_version.split("."))

View file

@ -75,7 +75,7 @@ from fbt.util import (
wrap_tempfile,
path_as_posix,
)
from fbt.appmanifest import FlipperAppType
from fbt.appmanifest import FlipperAppType, FlipperApplication
from fbt.sdk.cache import SdkCache
# Base environment with all tools loaded from SDK
@ -410,6 +410,12 @@ dist_env.Alias("vscode_dist", vscode_dist)
# Creating app from base 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_dist = []
for template_file in app_template_dir.glob("*"):