- Use TXT records in order to determine the latest available version. - This addresses a valid privacy issue, as with HTTP requests the server can keep track(estimated) of how many instances are using Forgejo, with DNS that's basically not possible as the server will never receive any data, as the only ones receiving data are DNS resolvers. (cherry picked from commit0baefb546a
) (cherry picked from commite8ee41880b
) (cherry picked from commit7eca4f3bf1
) (cherry picked from commit6dde3992dc
) (cherry picked from commitfb3a37fbfc
) (cherry picked from commit8304af1e9d
) (cherry picked from commit0543a7d12a
) (cherry picked from commitc3a22933b7
) (cherry picked from commite243707694
) (cherry picked from commit7eb6d1bcf7
) (cherry picked from commit1d7b9535cd
) (cherry picked from commit05920dce67
) (cherry picked from commitf173f27d7c
) (cherry picked from commit90e1c9340e
) (cherry picked from commitde68610ea7
) (cherry picked from commit8d5757ea04
) (cherry picked from commitc7a7fff316
) (cherry picked from commit39ac8b8fc1
) (cherry picked from commit9889203301
) [PRIVACY]: Adjust update checker description - Resolves #323 - Adjust the description of the update check function on the installation page to describe the privacy method instead of the HTTP method by checking gitea.io (cherry picked from commit61eae5b105
)
335 lines
16 KiB
Handlebars
335 lines
16 KiB
Handlebars
{{template "base/head" .}}
|
|
<div role="main" aria-label="{{.Title}}" class="page-content install">
|
|
<div class="ui middle very relaxed page grid">
|
|
<div class="sixteen wide center aligned centered column">
|
|
<h3 class="ui top attached header">
|
|
{{.locale.Tr "install.title"}}
|
|
</h3>
|
|
<div class="ui attached segment">
|
|
{{template "base/alert" .}}
|
|
|
|
<p>{{.locale.Tr "install.docker_helper" "https://docs.gitea.io/en-us/install-with-docker/" | Safe}}</p>
|
|
|
|
<form class="ui form" action="{{AppSubUrl}}/" method="post">
|
|
<!-- Database Settings -->
|
|
<h4 class="ui dividing header">{{.locale.Tr "install.db_title"}}</h4>
|
|
<p>{{.locale.Tr "install.require_db_desc"}}</p>
|
|
<div class="inline required field {{if .Err_DbType}}error{{end}}">
|
|
<label>{{.locale.Tr "install.db_type"}}</label>
|
|
<div class="ui selection database type dropdown">
|
|
<input type="hidden" id="db_type" name="db_type" value="{{.CurDbType}}">
|
|
<div class="text">{{.CurDbType}}</div>
|
|
{{svg "octicon-triangle-down" 14 "dropdown icon"}}
|
|
<div class="menu">
|
|
{{range .DbTypeNames}}
|
|
<div class="item" data-value="{{.type}}">{{.name}}</div>
|
|
{{end}}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="gt-hidden" data-db-setting-for="common-host">
|
|
<div class="inline required field {{if .Err_DbSetting}}error{{end}}">
|
|
<label for="db_host">{{.locale.Tr "install.host"}}</label>
|
|
<input id="db_host" name="db_host" value="{{.db_host}}">
|
|
</div>
|
|
<div class="inline required field {{if .Err_DbSetting}}error{{end}}">
|
|
<label for="db_user">{{.locale.Tr "install.user"}}</label>
|
|
<input id="db_user" name="db_user" value="{{.db_user}}">
|
|
</div>
|
|
<div class="inline required field {{if .Err_DbSetting}}error{{end}}">
|
|
<label for="db_passwd">{{.locale.Tr "install.password"}}</label>
|
|
<input id="db_passwd" name="db_passwd" type="password" value="{{.db_passwd}}">
|
|
</div>
|
|
<div class="inline required field {{if .Err_DbSetting}}error{{end}}">
|
|
<label for="db_name">{{.locale.Tr "install.db_name"}}</label>
|
|
<input id="db_name" name="db_name" value="{{.db_name}}">
|
|
</div>
|
|
</div>
|
|
|
|
<div class="gt-hidden" data-db-setting-for="postgres">
|
|
<div class="inline required field">
|
|
<label>{{.locale.Tr "install.ssl_mode"}}</label>
|
|
<div class="ui selection database type dropdown">
|
|
<input type="hidden" name="ssl_mode" value="{{if .ssl_mode}}{{.ssl_mode}}{{else}}disable{{end}}">
|
|
<div class="default text">disable</div>
|
|
{{svg "octicon-triangle-down" 14 "dropdown icon"}}
|
|
<div class="menu">
|
|
<div class="item" data-value="disable">Disable</div>
|
|
<div class="item" data-value="require">Require</div>
|
|
<div class="item" data-value="verify-full">Verify Full</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="inline field {{if .Err_DbSetting}}error{{end}}">
|
|
<label for="db_schema">{{.locale.Tr "install.db_schema"}}</label>
|
|
<input id="db_schema" name="db_schema" value="{{.db_schema}}">
|
|
<span class="help">{{.locale.Tr "install.db_schema_helper"}}</span>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="gt-hidden" data-db-setting-for="sqlite3">
|
|
<div class="inline required field {{if or .Err_DbPath .Err_DbSetting}}error{{end}}">
|
|
<label for="db_path">{{.locale.Tr "install.path"}}</label>
|
|
<input id="db_path" name="db_path" value="{{.db_path}}">
|
|
<span class="help">{{.locale.Tr "install.sqlite_helper" | Safe}}</span>
|
|
</div>
|
|
</div>
|
|
|
|
{{if .Err_DbInstalledBefore}}
|
|
<div>
|
|
<p class="reinstall-message">{{.locale.Tr "install.reinstall_confirm_message"}}</p>
|
|
<div class="reinstall-confirm">
|
|
<div class="ui checkbox">
|
|
<label>{{.locale.Tr "install.reinstall_confirm_check_1"}}</label>
|
|
<input name="reinstall_confirm_first" type="checkbox">
|
|
</div>
|
|
</div>
|
|
<div class="reinstall-confirm">
|
|
<div class="ui checkbox">
|
|
<label>{{.locale.Tr "install.reinstall_confirm_check_2"}}</label>
|
|
<input name="reinstall_confirm_second" type="checkbox">
|
|
</div>
|
|
</div>
|
|
<div class="reinstall-confirm">
|
|
<div class="ui checkbox">
|
|
<label>{{.locale.Tr "install.reinstall_confirm_check_3"}}</label>
|
|
<input name="reinstall_confirm_third" type="checkbox">
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{{end}}
|
|
|
|
<!-- General Settings -->
|
|
<h4 class="ui dividing header">{{.locale.Tr "install.general_title"}}</h4>
|
|
<div class="inline required field {{if .Err_AppName}}error{{end}}">
|
|
<label for="app_name">{{.locale.Tr "install.app_name"}}</label>
|
|
<input id="app_name" name="app_name" value="{{.app_name}}" required>
|
|
<span class="help">{{.locale.Tr "install.app_name_helper"}}</span>
|
|
</div>
|
|
<div class="inline required field {{if .Err_RepoRootPath}}error{{end}}">
|
|
<label for="repo_root_path">{{.locale.Tr "install.repo_path"}}</label>
|
|
<input id="repo_root_path" name="repo_root_path" value="{{.repo_root_path}}" required>
|
|
<span class="help">{{.locale.Tr "install.repo_path_helper"}}</span>
|
|
</div>
|
|
<div class="inline field {{if .Err_LFSRootPath}}error{{end}}">
|
|
<label for="lfs_root_path">{{.locale.Tr "install.lfs_path"}}</label>
|
|
<input id="lfs_root_path" name="lfs_root_path" value="{{.lfs_root_path}}">
|
|
<span class="help">{{.locale.Tr "install.lfs_path_helper"}}</span>
|
|
</div>
|
|
<div class="inline required field {{if .Err_RunUser}}error{{end}}">
|
|
<label for="run_user">{{.locale.Tr "install.run_user"}}</label>
|
|
<input id="run_user" name="run_user" value="{{.run_user}}" required>
|
|
<span class="help">{{.locale.Tr "install.run_user_helper"}}</span>
|
|
</div>
|
|
<div class="inline required field">
|
|
<label for="domain">{{.locale.Tr "install.domain"}}</label>
|
|
<input id="domain" name="domain" value="{{.domain}}" placeholder="try.gitea.io" required>
|
|
<span class="help">{{.locale.Tr "install.domain_helper"}}</span>
|
|
</div>
|
|
<div class="inline field">
|
|
<label for="ssh_port">{{.locale.Tr "install.ssh_port"}}</label>
|
|
<input id="ssh_port" name="ssh_port" value="{{.ssh_port}}">
|
|
<span class="help">{{.locale.Tr "install.ssh_port_helper"}}</span>
|
|
</div>
|
|
<div class="inline required field">
|
|
<label for="http_port">{{.locale.Tr "install.http_port"}}</label>
|
|
<input id="http_port" name="http_port" value="{{.http_port}}" required>
|
|
<span class="help">{{.locale.Tr "install.http_port_helper"}}</span>
|
|
</div>
|
|
<div class="inline required field">
|
|
<label for="app_url">{{.locale.Tr "install.app_url"}}</label>
|
|
<input id="app_url" name="app_url" value="{{.app_url}}" placeholder="https://try.gitea.io" required>
|
|
<span class="help">{{.locale.Tr "install.app_url_helper"}}</span>
|
|
</div>
|
|
<div class="inline required field">
|
|
<label for="log_root_path">{{.locale.Tr "install.log_root_path"}}</label>
|
|
<input id="log_root_path" name="log_root_path" value="{{.log_root_path}}" placeholder="log" required>
|
|
<span class="help">{{.locale.Tr "install.log_root_path_helper"}}</span>
|
|
</div>
|
|
<div class="inline field">
|
|
<div class="ui checkbox">
|
|
<label for="enable_update_checker">{{.locale.Tr "install.enable_update_checker"}}</label>
|
|
<input name="enable_update_checker" type="checkbox">
|
|
</div>
|
|
<span class="help">{{.locale.Tr "install.enable_update_checker_helper_forgejo"}}</span>
|
|
</div>
|
|
|
|
|
|
<!-- Optional Settings -->
|
|
<h4 class="ui dividing header">{{.locale.Tr "install.optional_title"}}</h4>
|
|
|
|
<!-- Email -->
|
|
<details class="optional field">
|
|
<summary class="title gt-py-3{{if .Err_SMTP}} text red{{end}}">
|
|
{{.locale.Tr "install.email_title"}}
|
|
</summary>
|
|
<div class="inline field">
|
|
<label for="smtp_addr">{{.locale.Tr "install.smtp_addr"}}</label>
|
|
<input id="smtp_addr" name="smtp_addr" value="{{.smtp_addr}}">
|
|
</div>
|
|
<div class="inline field">
|
|
<label for="smtp_port">{{.locale.Tr "install.smtp_port"}}</label>
|
|
<input id="smtp_port" name="smtp_port" value="{{.smtp_port}}">
|
|
</div>
|
|
<div class="inline field {{if .Err_SMTPFrom}}error{{end}}">
|
|
<label for="smtp_from">{{.locale.Tr "install.smtp_from"}}</label>
|
|
<input id="smtp_from" name="smtp_from" value="{{.smtp_from}}">
|
|
<span class="help">{{.locale.Tr "install.smtp_from_helper"}}</span>
|
|
</div>
|
|
<div class="inline field {{if .Err_SMTPUser}}error{{end}}">
|
|
<label for="smtp_user">{{.locale.Tr "install.mailer_user"}}</label>
|
|
<input id="smtp_user" name="smtp_user" value="{{.smtp_user}}">
|
|
</div>
|
|
<div class="inline field">
|
|
<label for="smtp_passwd">{{.locale.Tr "install.mailer_password"}}</label>
|
|
<input id="smtp_passwd" name="smtp_passwd" type="password" value="{{.smtp_passwd}}">
|
|
</div>
|
|
<div class="inline field">
|
|
<div class="ui checkbox">
|
|
<label>{{.locale.Tr "install.register_confirm"}}</label>
|
|
<input name="register_confirm" type="checkbox" {{if .register_confirm}}checked{{end}}>
|
|
</div>
|
|
</div>
|
|
<div class="inline field">
|
|
<div class="ui checkbox">
|
|
<label>{{.locale.Tr "install.mail_notify"}}</label>
|
|
<input name="mail_notify" type="checkbox" {{if .mail_notify}}checked{{end}}>
|
|
</div>
|
|
</div>
|
|
</details>
|
|
|
|
<!-- Server and other services -->
|
|
<details class="optional field">
|
|
<summary class="title gt-py-3{{if .Err_Services}} text red{{end}}">
|
|
{{.locale.Tr "install.server_service_title"}}
|
|
</summary>
|
|
<div class="inline field">
|
|
<div class="ui checkbox" id="offline-mode">
|
|
<label data-tooltip-content="{{.locale.Tr "install.offline_mode_popup"}}">{{.locale.Tr "install.offline_mode"}}</label>
|
|
<input name="offline_mode" type="checkbox" {{if .offline_mode}}checked{{end}}>
|
|
</div>
|
|
</div>
|
|
<div class="inline field">
|
|
<div class="ui checkbox" id="disable-gravatar">
|
|
<label data-tooltip-content="{{.locale.Tr "install.disable_gravatar_popup"}}">{{.locale.Tr "install.disable_gravatar"}}</label>
|
|
<input name="disable_gravatar" type="checkbox" {{if .disable_gravatar}}checked{{end}}>
|
|
</div>
|
|
</div>
|
|
<div class="inline field">
|
|
<div class="ui checkbox" id="federated-avatar-lookup">
|
|
<label data-tooltip-content="{{.locale.Tr "install.federated_avatar_lookup_popup"}}">{{.locale.Tr "install.federated_avatar_lookup"}}</label>
|
|
<input name="enable_federated_avatar" type="checkbox" {{if .enable_federated_avatar}}checked{{end}}>
|
|
</div>
|
|
</div>
|
|
<div class="inline field">
|
|
<div class="ui checkbox" id="enable-openid-signin">
|
|
<label data-tooltip-content="{{.locale.Tr "install.openid_signin_popup"}}">{{.locale.Tr "install.openid_signin"}}</label>
|
|
<input name="enable_open_id_sign_in" type="checkbox" {{if .enable_open_id_sign_in}}checked{{end}}>
|
|
</div>
|
|
</div>
|
|
<div class="inline field">
|
|
<div class="ui checkbox" id="disable-registration">
|
|
<label data-tooltip-content="{{.locale.Tr "install.disable_registration_popup"}}">{{.locale.Tr "install.disable_registration"}}</label>
|
|
<input name="disable_registration" type="checkbox" {{if .disable_registration}}checked{{end}}>
|
|
</div>
|
|
</div>
|
|
<div class="inline field">
|
|
<div class="ui checkbox" id="allow-only-external-registration">
|
|
<label data-tooltip-content="{{.locale.Tr "install.allow_only_external_registration_popup"}}">{{.locale.Tr "install.allow_only_external_registration_popup"}}</label>
|
|
<input name="allow_only_external_registration" type="checkbox" {{if .allow_only_external_registration}}checked{{end}}>
|
|
</div>
|
|
</div>
|
|
<div class="inline field">
|
|
<div class="ui checkbox" id="enable-openid-signup">
|
|
<label data-tooltip-content="{{.locale.Tr "install.openid_signup_popup"}}">{{.locale.Tr "install.openid_signup"}}</label>
|
|
<input name="enable_open_id_sign_up" type="checkbox" {{if .enable_open_id_sign_up}}checked{{end}}>
|
|
</div>
|
|
</div>
|
|
<div class="inline field">
|
|
<div class="ui checkbox" id="enable-captcha">
|
|
<label data-tooltip-content="{{.locale.Tr "install.enable_captcha_popup"}}">{{.locale.Tr "install.enable_captcha"}}</label>
|
|
<input name="enable_captcha" type="checkbox" {{if .enable_captcha}}checked{{end}}>
|
|
</div>
|
|
</div>
|
|
<div class="inline field">
|
|
<div class="ui checkbox">
|
|
<label data-tooltip-content="{{.locale.Tr "install.require_sign_in_view_popup"}}">{{.locale.Tr "install.require_sign_in_view"}}</label>
|
|
<input name="require_sign_in_view" type="checkbox" {{if .require_sign_in_view}}checked{{end}}>
|
|
</div>
|
|
</div>
|
|
<div class="inline field">
|
|
<div class="ui checkbox">
|
|
<label data-tooltip-content="{{.locale.Tr "install.default_keep_email_private_popup"}}">{{.locale.Tr "install.default_keep_email_private"}}</label>
|
|
<input name="default_keep_email_private" type="checkbox" {{if .default_keep_email_private}}checked{{end}}>
|
|
</div>
|
|
</div>
|
|
<div class="inline field">
|
|
<div class="ui checkbox">
|
|
<label data-tooltip-content="{{.locale.Tr "install.default_allow_create_organization_popup"}}">{{.locale.Tr "install.default_allow_create_organization"}}</label>
|
|
<input name="default_allow_create_organization" type="checkbox" {{if .default_allow_create_organization}}checked{{end}}>
|
|
</div>
|
|
</div>
|
|
<div class="inline field">
|
|
<div class="ui checkbox">
|
|
<label data-tooltip-content="{{.locale.Tr "install.default_enable_timetracking_popup"}}">{{.locale.Tr "install.default_enable_timetracking"}}</label>
|
|
<input name="default_enable_timetracking" type="checkbox" {{if .default_enable_timetracking}}checked{{end}}>
|
|
</div>
|
|
</div>
|
|
<div class="inline field">
|
|
<label for="no_reply_address">{{.locale.Tr "install.no_reply_address"}}</label>
|
|
<input id="_no_reply_address" name="no_reply_address" value="{{.no_reply_address}}">
|
|
<span class="help">{{.locale.Tr "install.no_reply_address_helper"}}</span>
|
|
</div>
|
|
<div class="inline field">
|
|
<label for="password_algorithm">{{.locale.Tr "install.password_algorithm"}}</label>
|
|
<div class="ui selection dropdown">
|
|
<input id="password_algorithm" type="hidden" name="password_algorithm" value="{{.password_algorithm}}">
|
|
<div class="text">{{.password_algorithm}}</div>
|
|
{{svg "octicon-triangle-down" 14 "dropdown icon"}}
|
|
<div class="menu">
|
|
{{range .PasswordHashAlgorithms}}
|
|
<div class="item" data-value="{{.}}">{{.}}</div>
|
|
{{end}}
|
|
</div>
|
|
</div>
|
|
<span class="help">{{.locale.Tr "install.password_algorithm_helper"}}</span>
|
|
</div>
|
|
</details>
|
|
|
|
<!-- Admin -->
|
|
<details class="optional field">
|
|
<summary class="title gt-py-3{{if .Err_Admin}} text red{{end}}">
|
|
{{.locale.Tr "install.admin_title"}}
|
|
</summary>
|
|
<p class="center">{{.locale.Tr "install.admin_setting_desc"}}</p>
|
|
<div class="inline field {{if .Err_AdminName}}error{{end}}">
|
|
<label for="admin_name">{{.locale.Tr "install.admin_name"}}</label>
|
|
<input id="admin_name" name="admin_name" value="{{.admin_name}}">
|
|
</div>
|
|
<div class="inline field {{if .Err_AdminEmail}}error{{end}}">
|
|
<label for="admin_email">{{.locale.Tr "install.admin_email"}}</label>
|
|
<input id="admin_email" name="admin_email" type="email" value="{{.admin_email}}">
|
|
</div>
|
|
<div class="inline field {{if .Err_AdminPasswd}}error{{end}}">
|
|
<label for="admin_passwd">{{.locale.Tr "install.admin_password"}}</label>
|
|
<input id="admin_passwd" name="admin_passwd" type="password" autocomplete="new-password" value="{{.admin_passwd}}">
|
|
</div>
|
|
<div class="inline field {{if .Err_AdminPasswd}}error{{end}}">
|
|
<label for="admin_confirm_passwd">{{.locale.Tr "install.confirm_password"}}</label>
|
|
<input id="admin_confirm_passwd" name="admin_confirm_passwd" autocomplete="new-password" type="password" value="{{.admin_confirm_passwd}}">
|
|
</div>
|
|
</details>
|
|
|
|
<div class="divider"></div>
|
|
<div class="inline field">
|
|
<label></label>
|
|
<button class="ui primary button">{{.locale.Tr "install.install_btn_confirm"}}</button>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<img class="gt-hidden" src="{{AssetUrlPrefix}}/img/loading.png">
|
|
{{template "base/footer" .}}
|