Link to privacy policies

pull/199/head
M66B 4 years ago
parent 749d791639
commit 6eed965e73

@ -3740,8 +3740,8 @@ For more information, please see [this article](https://en.wikipedia.org/wiki/Do
FairEmail currently uses the following block lists: FairEmail currently uses the following block lists:
* [Spamhaus zen](https://www.spamhaus.org/zen/) - [Terms of Use](https://www.spamhaus.org/organization/dnsblusage/) - [Privacy policy](https://www.spamhaus.org/organization/privacy/) * [Spamhaus zen](https://www.spamhaus.org/zen/) – [Terms of Use](https://www.spamhaus.org/organization/dnsblusage/) — [Privacy policy](https://www.spamhaus.org/organization/privacy/)
* [Spamcop](https://www.spamcop.net/) - [Legal info](https://www.spamcop.net/fom-serve/cache/297.html) - [Privacy policy](https://www.spamcop.net/fom-serve/cache/168.html) * [Spamcop](https://www.spamcop.net/) – [Legal info](https://www.spamcop.net/fom-serve/cache/297.html) — [Privacy policy](https://www.spamcop.net/fom-serve/cache/168.html)
<br /> <br />

@ -20,4 +20,17 @@ and therefore adheres to the [Google API Services User Data Policy](https://deve
including the Limited Use requirements. including the Limited Use requirements.
Google API Services are used only to authenticate Gmail accounts though OAuth. Google API Services are used only to authenticate Gmail accounts though OAuth.
FairEmail **can use** these services if they are explicitly enabled (off by default) or are explicitly used by you:
* [ipinfo.io](https://ipinfo.io/) &#8211; [Privacy policy](https://ipinfo.io/privacy-policy)
* [Gravatar](https://gravatar.com/) &#8211; [Privacy policy](https://automattic.com/privacy/)
* [Spamhaus zen](https://www.spamhaus.org/zen/) &#8211; [Privacy policy](https://www.spamhaus.org/organization/privacy/)
* [Spamcop](https://www.spamcop.net/) &#8211; [Privacy policy](https://www.spamcop.net/fom-serve/cache/168.html)
* [Thunderbird autoconfiguration](https://developer.mozilla.org/docs/Mozilla/Thunderbird/Autoconfiguration) &#8211; [Privacy policy](https://www.mozilla.org/privacy/)
FairEmail **can access** the websites at the domain names of email addresses
if [favicons](https://en.wikipedia.org/wiki/Favicon) are explicitly enabled (off by default).
<br />
Copyright &copy; 2018-2021 Marcel Bokhorst. Copyright &copy; 2018-2021 Marcel Bokhorst.

@ -20,4 +20,17 @@ and therefore adheres to the [Google API Services User Data Policy](https://deve
including the Limited Use requirements. including the Limited Use requirements.
Google API Services are used only to authenticate Gmail accounts though OAuth. Google API Services are used only to authenticate Gmail accounts though OAuth.
FairEmail **can use** these services if they are explicitly enabled (off by default) or are explicitly used by you:
* [ipinfo.io](https://ipinfo.io/) &#8211; [Privacy policy](https://ipinfo.io/privacy-policy)
* [Gravatar](https://gravatar.com/) &#8211; [Privacy policy](https://automattic.com/privacy/)
* [Spamhaus zen](https://www.spamhaus.org/zen/) &#8211; [Privacy policy](https://www.spamhaus.org/organization/privacy/)
* [Spamcop](https://www.spamcop.net/) &#8211; [Privacy policy](https://www.spamcop.net/fom-serve/cache/168.html)
* [Thunderbird autoconfiguration](https://developer.mozilla.org/docs/Mozilla/Thunderbird/Autoconfiguration) &#8211; [Privacy policy](https://www.mozilla.org/privacy/)
FairEmail **can access** the websites at the domain names of email addresses
if [favicons](https://en.wikipedia.org/wiki/Favicon) are explicitly enabled (off by default).
<br />
Copyright &copy; 2018-2021 Marcel Bokhorst. Copyright &copy; 2018-2021 Marcel Bokhorst.

@ -172,6 +172,7 @@ public class EmailProvider implements Parcelable {
provider.oauth.authorizationEndpoint = xml.getAttributeValue(null, "authorizationEndpoint"); provider.oauth.authorizationEndpoint = xml.getAttributeValue(null, "authorizationEndpoint");
provider.oauth.tokenEndpoint = xml.getAttributeValue(null, "tokenEndpoint"); provider.oauth.tokenEndpoint = xml.getAttributeValue(null, "tokenEndpoint");
provider.oauth.redirectUri = xml.getAttributeValue(null, "redirectUri"); provider.oauth.redirectUri = xml.getAttributeValue(null, "redirectUri");
provider.oauth.privacy = xml.getAttributeValue(null, "privacy");
} else } else
throw new IllegalAccessException(name); throw new IllegalAccessException(name);
} else if (eventType == XmlPullParser.END_TAG) { } else if (eventType == XmlPullParser.END_TAG) {
@ -802,5 +803,6 @@ public class EmailProvider implements Parcelable {
String authorizationEndpoint; String authorizationEndpoint;
String tokenEndpoint; String tokenEndpoint;
String redirectUri; String redirectUri;
String privacy;
} }
} }

@ -32,6 +32,7 @@ import android.database.Cursor;
import android.graphics.Paint; import android.graphics.Paint;
import android.net.ConnectivityManager; import android.net.ConnectivityManager;
import android.net.NetworkInfo; import android.net.NetworkInfo;
import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.provider.ContactsContract; import android.provider.ContactsContract;
import android.text.TextUtils; import android.text.TextUtils;
@ -66,6 +67,8 @@ public class FragmentGmail extends FragmentBase {
private ViewGroup view; private ViewGroup view;
private ScrollView scroll; private ScrollView scroll;
private TextView tvTitle;
private TextView tvPrivacy;
private Button btnGrant; private Button btnGrant;
private TextView tvGranted; private TextView tvGranted;
private EditText etName; private EditText etName;
@ -80,6 +83,8 @@ public class FragmentGmail extends FragmentBase {
private Group grpError; private Group grpError;
private static final String PRIVACY_URI = "https://policies.google.com/privacy";
@Override @Override
@Nullable @Nullable
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
@ -90,6 +95,8 @@ public class FragmentGmail extends FragmentBase {
scroll = view.findViewById(R.id.scroll); scroll = view.findViewById(R.id.scroll);
// Get controls // Get controls
tvTitle = view.findViewById(R.id.tvTitle);
tvPrivacy = view.findViewById(R.id.tvPrivacy);
btnGrant = view.findViewById(R.id.btnGrant); btnGrant = view.findViewById(R.id.btnGrant);
tvGranted = view.findViewById(R.id.tvGranted); tvGranted = view.findViewById(R.id.tvGranted);
etName = view.findViewById(R.id.etName); etName = view.findViewById(R.id.etName);
@ -106,6 +113,14 @@ public class FragmentGmail extends FragmentBase {
// Wire controls // Wire controls
tvPrivacy.setPaintFlags(tvPrivacy.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
tvPrivacy.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Helper.view(v.getContext(), Uri.parse(PRIVACY_URI), false);
}
});
btnGrant.setOnClickListener(new View.OnClickListener() { btnGrant.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
@ -170,6 +185,7 @@ public class FragmentGmail extends FragmentBase {
// Initialize // Initialize
Helper.setViewsEnabled(view, false); Helper.setViewsEnabled(view, false);
tvTitle.setText(getString(R.string.title_setup_oauth_rationale, "Gmail"));
pbSelect.setVisibility(View.GONE); pbSelect.setVisibility(View.GONE);
grpError.setVisibility(View.GONE); grpError.setVisibility(View.GONE);

@ -25,6 +25,7 @@ import android.content.Intent;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo; import android.content.pm.ResolveInfo;
import android.graphics.Paint;
import android.net.ConnectivityManager; import android.net.ConnectivityManager;
import android.net.NetworkInfo; import android.net.NetworkInfo;
import android.net.Uri; import android.net.Uri;
@ -92,12 +93,14 @@ import static eu.faircode.email.ServiceAuthenticator.AUTH_TYPE_OAUTH;
public class FragmentOAuth extends FragmentBase { public class FragmentOAuth extends FragmentBase {
private String id; private String id;
private String name; private String name;
private String privacy;
private boolean askAccount; private boolean askAccount;
private ViewGroup view; private ViewGroup view;
private ScrollView scroll; private ScrollView scroll;
private TextView tvGrantHint; private TextView tvTitle;
private TextView tvPrivacy;
private EditText etName; private EditText etName;
private EditText etEmail; private EditText etEmail;
private CheckBox cbUpdate; private CheckBox cbUpdate;
@ -122,6 +125,7 @@ public class FragmentOAuth extends FragmentBase {
Bundle args = getArguments(); Bundle args = getArguments();
id = args.getString("id"); id = args.getString("id");
name = args.getString("name"); name = args.getString("name");
privacy = args.getString("privacy");
askAccount = args.getBoolean("askAccount", false); askAccount = args.getBoolean("askAccount", false);
} }
@ -135,7 +139,8 @@ public class FragmentOAuth extends FragmentBase {
scroll = view.findViewById(R.id.scroll); scroll = view.findViewById(R.id.scroll);
// Get controls // Get controls
tvGrantHint = view.findViewById(R.id.tvGrantHint); tvTitle = view.findViewById(R.id.tvTitle);
tvPrivacy = view.findViewById(R.id.tvPrivacy);
etName = view.findViewById(R.id.etName); etName = view.findViewById(R.id.etName);
etEmail = view.findViewById(R.id.etEmail); etEmail = view.findViewById(R.id.etEmail);
cbUpdate = view.findViewById(R.id.cbUpdate); cbUpdate = view.findViewById(R.id.cbUpdate);
@ -153,6 +158,15 @@ public class FragmentOAuth extends FragmentBase {
// Wire controls // Wire controls
tvPrivacy.setVisibility(TextUtils.isEmpty(privacy) ? View.GONE : View.VISIBLE);
tvPrivacy.setPaintFlags(tvPrivacy.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
tvPrivacy.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Helper.view(v.getContext(), Uri.parse(privacy), false);
}
});
btnOAuth.setOnClickListener(new View.OnClickListener() { btnOAuth.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
@ -168,7 +182,7 @@ public class FragmentOAuth extends FragmentBase {
}); });
// Initialize // Initialize
tvGrantHint.setText(getString(R.string.title_setup_oauth_rationale, name)); tvTitle.setText(getString(R.string.title_setup_oauth_rationale, name));
etName.setVisibility(askAccount ? View.VISIBLE : View.GONE); etName.setVisibility(askAccount ? View.VISIBLE : View.GONE);
etEmail.setVisibility(askAccount ? View.VISIBLE : View.GONE); etEmail.setVisibility(askAccount ? View.VISIBLE : View.GONE);
pbOAuth.setVisibility(View.GONE); pbOAuth.setVisibility(View.GONE);

@ -21,6 +21,7 @@ package eu.faircode.email;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.graphics.Paint;
import android.net.ConnectivityManager; import android.net.ConnectivityManager;
import android.net.NetworkInfo; import android.net.NetworkInfo;
import android.net.Uri; import android.net.Uri;
@ -60,6 +61,7 @@ public class FragmentQuickSetup extends FragmentBase {
private ViewGroup view; private ViewGroup view;
private ScrollView scroll; private ScrollView scroll;
private TextView tvPrivacy;
private EditText etName; private EditText etName;
private EditText etEmail; private EditText etEmail;
private TextInputLayout tilPassword; private TextInputLayout tilPassword;
@ -83,6 +85,8 @@ public class FragmentQuickSetup extends FragmentBase {
private Group grpSetup; private Group grpSetup;
private Group grpError; private Group grpError;
private static final String PRIVACY_URI = "https://www.mozilla.org/privacy/";
@Override @Override
@Nullable @Nullable
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
@ -93,6 +97,7 @@ public class FragmentQuickSetup extends FragmentBase {
scroll = view.findViewById(R.id.scroll); scroll = view.findViewById(R.id.scroll);
// Get controls // Get controls
tvPrivacy = view.findViewById(R.id.tvPrivacy);
etName = view.findViewById(R.id.etName); etName = view.findViewById(R.id.etName);
etEmail = view.findViewById(R.id.etEmail); etEmail = view.findViewById(R.id.etEmail);
tilPassword = view.findViewById(R.id.tilPassword); tilPassword = view.findViewById(R.id.tilPassword);
@ -118,6 +123,14 @@ public class FragmentQuickSetup extends FragmentBase {
// Wire controls // Wire controls
tvPrivacy.setPaintFlags(tvPrivacy.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
tvPrivacy.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Helper.view(v.getContext(), Uri.parse(PRIVACY_URI), false);
}
});
tilPassword.setHintEnabled(false); tilPassword.setHintEnabled(false);
tilPassword.getEditText().setOnEditorActionListener(new TextView.OnEditorActionListener() { tilPassword.getEditText().setOnEditorActionListener(new TextView.OnEditorActionListener() {

@ -195,6 +195,7 @@ public class FragmentSetup extends FragmentBase {
.setIntent(new Intent(ActivitySetup.ACTION_QUICK_OAUTH) .setIntent(new Intent(ActivitySetup.ACTION_QUICK_OAUTH)
.putExtra("id", provider.id) .putExtra("id", provider.id)
.putExtra("name", provider.description) .putExtra("name", provider.description)
.putExtra("privacy", provider.oauth.privacy)
.putExtra("askAccount", provider.oauth.askAccount)); .putExtra("askAccount", provider.oauth.askAccount));
int resid = context.getResources() int resid = context.getResources()
.getIdentifier("provider_" + provider.id, "drawable", context.getPackageName()); .getIdentifier("provider_" + provider.id, "drawable", context.getPackageName());

@ -13,15 +13,40 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
<eu.faircode.email.FixedTextView
android:id="@+id/tvTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/title_setup_oauth_rationale"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textStyle="italic"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<eu.faircode.email.FixedTextView
android:id="@+id/tvPrivacy"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:drawableEnd="@drawable/twotone_open_in_new_12"
android:drawablePadding="6dp"
android:drawableTint="?android:attr/textColorLink"
android:text="@string/title_privacy_policy"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textColor="?android:attr/textColorLink"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvTitle" />
<eu.faircode.email.FixedTextView <eu.faircode.email.FixedTextView
android:id="@+id/tvGrantHint" android:id="@+id/tvGrantHint"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:text="@string/title_setup_gmail_rationale" android:text="@string/title_setup_gmail_rationale"
android:textAppearance="@style/TextAppearance.AppCompat.Small" android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textStyle="italic" android:textStyle="italic"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toBottomOf="@id/tvPrivacy" />
<Button <Button
android:id="@+id/btnGrant" android:id="@+id/btnGrant"

@ -14,7 +14,7 @@
android:layout_height="wrap_content"> android:layout_height="wrap_content">
<eu.faircode.email.FixedTextView <eu.faircode.email.FixedTextView
android:id="@+id/tvGrantHint" android:id="@+id/tvTitle"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/title_setup_oauth_rationale" android:text="@string/title_setup_oauth_rationale"
@ -23,10 +23,25 @@
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
<eu.faircode.email.FixedTextView
android:id="@+id/tvPrivacy"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:drawableEnd="@drawable/twotone_open_in_new_12"
android:drawablePadding="6dp"
android:drawableTint="?android:attr/textColorLink"
android:text="@string/title_privacy_policy"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textColor="?android:attr/textColorLink"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvTitle" />
<eu.faircode.email.EditTextPlain <eu.faircode.email.EditTextPlain
android:id="@+id/etName" android:id="@+id/etName"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:autofillHints="name" android:autofillHints="name"
android:hint="@string/title_identity_name" android:hint="@string/title_identity_name"
android:imeOptions="actionNext" android:imeOptions="actionNext"
@ -34,7 +49,7 @@
android:textAppearance="@style/TextAppearance.AppCompat.Medium" android:textAppearance="@style/TextAppearance.AppCompat.Medium"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvGrantHint"> app:layout_constraintTop_toBottomOf="@id/tvPrivacy">
<requestFocus /> <requestFocus />
</eu.faircode.email.EditTextPlain> </eu.faircode.email.EditTextPlain>

@ -13,10 +13,35 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
<eu.faircode.email.FixedTextView
android:id="@+id/tvTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/title_setup_quick_hint"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textStyle="italic"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<eu.faircode.email.FixedTextView
android:id="@+id/tvPrivacy"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:drawableEnd="@drawable/twotone_open_in_new_12"
android:drawablePadding="6dp"
android:drawableTint="?android:attr/textColorLink"
android:text="@string/title_privacy_policy"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textColor="?android:attr/textColorLink"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvTitle" />
<eu.faircode.email.EditTextPlain <eu.faircode.email.EditTextPlain
android:id="@+id/etName" android:id="@+id/etName"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:autofillHints="name" android:autofillHints="name"
android:hint="@string/title_identity_name" android:hint="@string/title_identity_name"
android:imeOptions="actionNext" android:imeOptions="actionNext"
@ -24,7 +49,7 @@
android:textAppearance="@style/TextAppearance.AppCompat.Medium" android:textAppearance="@style/TextAppearance.AppCompat.Medium"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"> app:layout_constraintTop_toBottomOf="@id/tvPrivacy">
<requestFocus /> <requestFocus />
</eu.faircode.email.EditTextPlain> </eu.faircode.email.EditTextPlain>
@ -83,17 +108,6 @@
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvCharacters" /> app:layout_constraintTop_toBottomOf="@id/tvCharacters" />
<eu.faircode.email.FixedTextView
android:id="@+id/tvHint"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:text="@string/title_setup_quick_hint"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textStyle="italic"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvCaseSensitiveHint" />
<Button <Button
android:id="@+id/btnCheck" android:id="@+id/btnCheck"
android:layout_width="wrap_content" android:layout_width="wrap_content"
@ -102,7 +116,7 @@
android:tag="disable" android:tag="disable"
android:text="@string/title_check" android:text="@string/title_check"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvHint" /> app:layout_constraintTop_toBottomOf="@id/tvCaseSensitiveHint" />
<eu.faircode.email.ContentLoadingProgressBar <eu.faircode.email.ContentLoadingProgressBar
android:id="@+id/pbCheck" android:id="@+id/pbCheck"

@ -144,6 +144,7 @@
<string name="title_disagree">I disagree</string> <string name="title_disagree">I disagree</string>
<string name="title_version">Version %1$s</string> <string name="title_version">Version %1$s</string>
<string name="title_privacy_policy">Privacy policy</string>
<string name="title_list_accounts">Accounts</string> <string name="title_list_accounts">Accounts</string>
<string name="title_list_identities">Identities</string> <string name="title_list_identities">Identities</string>

@ -97,6 +97,7 @@
clientId="3514cf2c-e7a3-45a2-80d4-6a3c3498eca0" clientId="3514cf2c-e7a3-45a2-80d4-6a3c3498eca0"
clientSecret="r=o4@SlzU:MA6MlXM6mPG[44i4gYPq[@" clientSecret="r=o4@SlzU:MA6MlXM6mPG[44i4gYPq[@"
enabled="true" enabled="true"
privacy="https://privacy.microsoft.com/privacystatement"
redirectUri="https://oauth.faircode.eu/" redirectUri="https://oauth.faircode.eu/"
scopes="openid,email,offline_access,https://outlook.office.com/IMAP.AccessAsUser.All,https://outlook.office.com/SMTP.Send" scopes="openid,email,offline_access,https://outlook.office.com/IMAP.AccessAsUser.All,https://outlook.office.com/SMTP.Send"
tokenEndpoint="https://login.microsoftonline.com/common/oauth2/v2.0/token" /> tokenEndpoint="https://login.microsoftonline.com/common/oauth2/v2.0/token" />
@ -139,6 +140,7 @@
clientSecret="261a91fbbdb2852c4e80fdd3d1db4a8ebfa4c42b" clientSecret="261a91fbbdb2852c4e80fdd3d1db4a8ebfa4c42b"
enabled="true" enabled="true"
pcke="true" pcke="true"
privacy="https://www.verizonmedia.com/policies/us/en/verizonmedia/privacy/index.html"
redirectUri="https://oauth.faircode.eu/" redirectUri="https://oauth.faircode.eu/"
scopes="mail-w" scopes="mail-w"
tokenEndpoint="https://api.login.yahoo.com/oauth2/get_token" /> tokenEndpoint="https://api.login.yahoo.com/oauth2/get_token" />
@ -327,6 +329,7 @@
clientId="a41b1a433d5041c39edebda5b866d2fc" clientId="a41b1a433d5041c39edebda5b866d2fc"
clientSecret="03e6fb9c27374d5b81c612add522f6a0" clientSecret="03e6fb9c27374d5b81c612add522f6a0"
enabled="true" enabled="true"
privacy="https://yandex.com/legal/confidential/"
redirectUri="https://oauth.faircode.eu/" redirectUri="https://oauth.faircode.eu/"
scopes="mail:imap_full,mail:smtp" scopes="mail:imap_full,mail:smtp"
tokenEndpoint="https://oauth.yandex.com/token" /> tokenEndpoint="https://oauth.yandex.com/token" />
@ -501,6 +504,7 @@
clientId="ce54d27dc1574b3a8b50e6789cd1a44a" clientId="ce54d27dc1574b3a8b50e6789cd1a44a"
clientSecret="5f1525783e1d4defb3bc9c2c4b7d0c54" clientSecret="5f1525783e1d4defb3bc9c2c4b7d0c54"
enabled="true" enabled="true"
privacy="https://help.mail.ru/legal/terms/common/privacy"
redirectUri="https://oauth.faircode.eu/" redirectUri="https://oauth.faircode.eu/"
scopes="userinfo mail.imap" scopes="userinfo mail.imap"
tokenEndpoint="https://oauth.mail.ru/token" /> tokenEndpoint="https://oauth.mail.ru/token" />

Loading…
Cancel
Save