{% extends "base.html" %} {% block title %}Settings · Storepulse{% endblock %} {% macro reauth(saved) %} {% if saved %}{% endif %} {% endmacro %} {% macro saved_line(info) %} {% if info %}

Saved {{ info.saved }} · fingerprint {{ info.fingerprint }}

{% endif %} {% endmacro %} {% macro problem_for(section) %} {% if problem and problem.section == section %}{% endif %} {% endmacro %} {% macro card_actions(section, info) %} {% if info %}
{% endif %} {% endmacro %} {% block content %}

Settings

{% if welcome %}

Admin created. Add your store credentials and email below; each one is checked live before it's saved.

{% endif %} {% if saved %}

{{ saved }}

{% endif %} {% if checks_shown %}

Check results

{% endif %}

Apple App Store Connect

A Team API key with the Sales role (README, "Apple API key").

{{ problem_for("apple") }} {{ saved_line(credentials.apple) }}
{{ reauth(credentials.apple) }}
{{ card_actions("apple", credentials.apple) }}

Google Play

A service account invited in Play Console with View app information and download bulk reports; Android revenue also needs the optional financial permission (README, "Google service account").

{{ problem_for("google") }} {{ saved_line(credentials.google) }} {% if cfg.google %}

Service account: {{ cfg.google.service_account_email }}

{% endif %}
{{ reauth(credentials.google) }}
{{ card_actions("google", credentials.google) }}

Email

The daily digest goes through your own SMTP server; a test email is sent before saving (README, "SMTP setup").

{{ problem_for("email") }} {{ saved_line(credentials.email) }}
{{ reauth(credentials.email) }}
{{ card_actions("email", credentials.email) }}

Preferences

{{ problem_for("preferences") }}

Apps

{{ problem_for("apps") }} {% if apps %}
{% for app in apps %} {% endfor %}
Store namePlatformDisplay nameHiddenPaired with
{{ app.name }} {{ app.store_id }} {{ "iOS" if app.platform == "ios" else "Android" }} {% if partner[app.id] %}{{ partner[app.id].label }} ({{ app.pair_source }}){% else %}—{% endif %}

Hidden apps leave every list but still count in totals, and still get crash warnings.

Same-named iOS and Android apps pair automatically when the match is unambiguous; a pairing or unpairing you make here is kept.

{% else %}

Apps appear once a credential is saved.

{% endif %}

Account

{{ problem_for("account") }}

Signed in as {{ user.email }}. Two-factor authentication is {{ "on" if totp_enabled else "off" }}.

{% if totp_setup %}

Add this key to your authenticator app, then enter the code it shows. The key is shown only now.

{{ totp_setup.secret }}

{{ totp_setup.uri }}

{% elif totp_enabled %}
{% else %}
{% endif %}

Change password

{% endblock %}