diff --git a/confs/repko.yaml b/confs/repko.yaml index 5ac9b63..726cefc 100644 --- a/confs/repko.yaml +++ b/confs/repko.yaml @@ -77,6 +77,15 @@ variables: - name: "database_password" type: "string" default: "admin" + - name: "gpg_full_name" + type: "string" + default: "Repko Reposiory" + - name: "gpg_note" + type: "string" + default: "notee" + - name: "gpg_mail" + type: "string" + default: "admin@repko.com" - name: "debian_root" type: "string" default: "/var/www/repko/debian" @@ -185,14 +194,14 @@ sections: field-type: "input" description: "Домен на котором будет работать api" validate: - - rule: "regex_match(api_domain,`^[a-zA-Z0-9.-]+$`" + - rule: "regex_match(api_domain,`^[a-zA-Z0-9.-]+$`)" message: "Только латинские буквы, цифры, -, '.'" - name: "panel_domain" variable-name: "panel_domain" field-type: "input" description: "Домен на котором будет работать сайт" validate: - - rule: "regex_match(api_domain,`^[a-zA-Z0-9.-]+$`" + - rule: "regex_match(api_domain,`^[a-zA-Z0-9.-]+$`)" message: "Только латинские буквы, цифры, -, '.'" - name: "cookie_domain" variable-name: "cookie_domain" @@ -328,7 +337,7 @@ sections: parent: - "database_type" validate: - - rule: "regex_match(database_host,`^[a-zA-Z0-9.-]+$`" + - rule: "regex_match(database_host,`^[a-zA-Z0-9.-]+$`)" message: "Только латинские буквы, цифры, -, '.'" - name: "database_port" variable-name: "database_port" @@ -338,7 +347,7 @@ sections: parent: - "database_type" validate: - - rule: "regex_match(database_host,`^[0-9]+$`" + - rule: "regex_match(database_host,`^[0-9]+$`)" message: "Только цифры" - name: "database_name" variable-name: "database_name" @@ -348,7 +357,7 @@ sections: parent: - "database_type" validate: - - rule: "regex_match(database_name,`^[a-zA-Z0-9_-]+$`" + - rule: "regex_match(database_name,`^[a-zA-Z0-9_-]+$`)" message: "Только латинские буквы, цифры, -, _" - name: "database_user" variable-name: "database_user" @@ -358,7 +367,7 @@ sections: parent: - "database_type" validate: - - rule: "regex_match(database_user,`^[a-zA-Z0-9_-]+$`" + - rule: "regex_match(database_user,`^[a-zA-Z0-9_-]+$`)" message: "Только латинские буквы, цифры, -, _" - name: "database_password" variable-name: "database_password" @@ -370,6 +379,44 @@ sections: validate: - rule: "database_password!=''" message: "Поле не может быть пустым" + - name: "gpg" + description: "Настройка gpg" + condition: "not file_exists('/var/lib/repko/gnupg/pubring.kbx')" + fields: + - name: "gpg name" + variable-name: "gpg_full_name" + field-type: "input" + description: "Полное имя для gpg ключа" + validate: + - rule: "gpg_full_name!=''" + message: "Поле не может быть пустым" + - rule: "regex_match(gpg_full_name,`^[a-zA-z0-9 .-]+$`)" + message: "Только латинские буквы, цифры, -, _, ' '" + - name: "gpg note" + variable-name: "gpg_note" + field-type: "input" + description: "Описание для gpg ключа" + validate: + - rule: "regex_match(gpg_note,`^[a-zA-Z0-9 .-]*$`)" + message: "Только латинские буквы, цифры, -, _, ' ' либо пустое" + - name: "gpg mail" + variable-name: "gpg_mail" + field-type: "input" + description: "Почта для gpg ключа" + validate: + - rule: "gpg_mail!=''" + message: "Поле не может быть пустым" + - rule: "regex_match(gpg_mail,`^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}$`)" + message: "Не соответствует формату почты" + actions: + - name: "generate gpg key" + type: "command" + command: "sudo -u {{.repko_user}} gpg --homedir /var/lib/repko/gnupg --batch --passphrase '' --quick-generate-key '{.gpg_full_name} ({.gpg_note}) <{.gpg_mail}>' rsa4096" + error: "Не удалось создать ключ" + - name: "get gpg key id" + type: "command" + command: "sudo -u {{.repko_user}} gpg --homedir /var/lib/repko/gnupg --list-keys --with-colons | grep pub | cut -d: -f5 > /etc/repko/keyid" + error: "Не удалось получить и сохранить id gpg ключа" - name: "paths" description: "Настройка директорий" fields: diff --git a/setup/utils/field.go b/setup/utils/field.go index a2a7cef..550deca 100644 --- a/setup/utils/field.go +++ b/setup/utils/field.go @@ -65,8 +65,17 @@ func CheckCondition(condition string, app *types.PackageApplication) bool { return true } - result, err := expr.Eval(condition, ParamsForCondition(app)) - + params := ParamsForCondition(app) + options := append([]expr.Option{ + expr.Env(params), + expr.AllowUndefinedVariables(), + }, DefineExprCustomFunctions()...) + program, err := expr.Compile(condition, options...) + if err != nil { + logrus.Errorf("ошибка компиляции compute: %v", err) + return false + } + result, err := expr.Run(program, params) if err != nil { logrus.Errorf("Ошибка в условии '%s': %v", condition, err) return false