mirror of
https://codeberg.org/tom79/Fedilab.git
synced 2025-04-06 07:00:01 +03:00
Allow to login with a token
This commit is contained in:
parent
020be16f11
commit
f8ebd3435d
6 changed files with 109 additions and 9 deletions
|
@ -100,8 +100,10 @@ public class PushHelper {
|
|||
WorkManager.getInstance(context).cancelAllWorkByTag(Helper.WORKER_REFRESH_NOTIFICATION);
|
||||
new Thread(() -> {
|
||||
List<BaseAccount> accounts = new Account(context).getPushNotificationAccounts();
|
||||
for (BaseAccount account : accounts) {
|
||||
((Activity) context).runOnUiThread(() -> UnifiedPush.unregister(context, account.user_id + "@" + account.instance));
|
||||
if(accounts != null) {
|
||||
for (BaseAccount account : accounts) {
|
||||
((Activity) context).runOnUiThread(() -> UnifiedPush.unregister(context, account.user_id + "@" + account.instance));
|
||||
}
|
||||
}
|
||||
}).start();
|
||||
break;
|
||||
|
|
|
@ -184,7 +184,7 @@ public class LoginActivity extends BaseBarActivity {
|
|||
|
||||
|
||||
@SuppressLint("ApplySharedPref")
|
||||
private void proceedLogin(Token token, String host) {
|
||||
public void proceedLogin(Token token, String host) {
|
||||
runOnUiThread(() -> {
|
||||
if (token != null) {
|
||||
//Update the account with the token;
|
||||
|
|
|
@ -22,6 +22,7 @@ import static app.fedilab.android.activities.LoginActivity.client_secretLogin;
|
|||
import static app.fedilab.android.activities.LoginActivity.currentInstanceLogin;
|
||||
import static app.fedilab.android.activities.LoginActivity.requestedAdmin;
|
||||
import static app.fedilab.android.activities.LoginActivity.softwareLogin;
|
||||
import static app.fedilab.android.mastodon.helper.Helper.TAG;
|
||||
|
||||
import android.Manifest;
|
||||
import android.content.Intent;
|
||||
|
@ -57,6 +58,7 @@ import java.net.URL;
|
|||
import app.fedilab.android.BaseMainActivity;
|
||||
import app.fedilab.android.BuildConfig;
|
||||
import app.fedilab.android.R;
|
||||
import app.fedilab.android.activities.LoginActivity;
|
||||
import app.fedilab.android.databinding.FragmentLoginMainBinding;
|
||||
import app.fedilab.android.mastodon.activities.ProxyActivity;
|
||||
import app.fedilab.android.mastodon.client.entities.app.Account;
|
||||
|
@ -65,10 +67,12 @@ import app.fedilab.android.mastodon.helper.Helper;
|
|||
import app.fedilab.android.mastodon.helper.MastodonHelper;
|
||||
import app.fedilab.android.mastodon.helper.ThemeHelper;
|
||||
import app.fedilab.android.mastodon.helper.ZipHelper;
|
||||
import app.fedilab.android.mastodon.viewmodel.mastodon.AccountsVM;
|
||||
import app.fedilab.android.mastodon.viewmodel.mastodon.AdminVM;
|
||||
import app.fedilab.android.mastodon.viewmodel.mastodon.AppsVM;
|
||||
import app.fedilab.android.mastodon.viewmodel.mastodon.InstanceSocialVM;
|
||||
import app.fedilab.android.mastodon.viewmodel.mastodon.NodeInfoVM;
|
||||
import app.fedilab.android.peertube.activities.LoginActivity;
|
||||
import app.fedilab.android.peertube.client.entities.Token;
|
||||
import es.dmoral.toasty.Toasty;
|
||||
|
||||
public class FragmentLoginMain extends Fragment {
|
||||
|
@ -80,6 +84,15 @@ public class FragmentLoginMain extends Fragment {
|
|||
private String oldSearch;
|
||||
private ActivityResultLauncher<String> permissionLauncher;
|
||||
|
||||
|
||||
public void setUseAToken(boolean useAToken){
|
||||
if(useAToken){
|
||||
|
||||
} else {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public View onCreateView(@NonNull LayoutInflater inflater,
|
||||
ViewGroup container, Bundle savedInstanceState) {
|
||||
|
||||
|
@ -168,8 +181,22 @@ public class FragmentLoginMain extends Fragment {
|
|||
if (currentInstanceLogin.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
binding.continueButton.setEnabled(false);
|
||||
String customToken;
|
||||
if(binding.loginTokenLayout.getVisibility() == View.VISIBLE) {
|
||||
if (binding.loginToken.getText() == null || binding.loginToken.getText().toString().isEmpty()) {
|
||||
binding.loginTokenLayout.setError(getString(R.string.toast_error_token_empty));
|
||||
binding.loginTokenLayout.setErrorEnabled(true);
|
||||
return;
|
||||
}
|
||||
customToken = binding.loginToken.getText().toString();
|
||||
} else {
|
||||
customToken = null;
|
||||
}
|
||||
NodeInfoVM nodeInfoVM = new ViewModelProvider(requireActivity()).get(NodeInfoVM.class);
|
||||
|
||||
|
||||
binding.continueButton.setEnabled(false);
|
||||
|
||||
String instance = binding.loginInstance.getText().toString().trim();
|
||||
nodeInfoVM.getNodeInfo(instance).observe(requireActivity(), nodeInfo -> {
|
||||
if (nodeInfo != null) {
|
||||
|
@ -198,6 +225,40 @@ public class FragmentLoginMain extends Fragment {
|
|||
softwareLogin = "MASTODON";
|
||||
}
|
||||
|
||||
if(customToken != null) {
|
||||
Account account = new Account();
|
||||
account.token = "Bearer " + customToken;
|
||||
Token token = new Token();
|
||||
token.setAccess_token(customToken);
|
||||
token.setToken_type("Bearer");
|
||||
account.client_id = "";
|
||||
account.client_secret = "";
|
||||
account.api = apiLogin;
|
||||
account.software = softwareLogin;
|
||||
account.instance = currentInstanceLogin;
|
||||
AccountsVM accountsVM = new ViewModelProvider(requireActivity()).get(AccountsVM.class);
|
||||
accountsVM.getConnectedAccount(currentInstanceLogin, account.token).observe(requireActivity(), mastodonAccount -> {
|
||||
if (mastodonAccount != null) {
|
||||
account.mastodon_account = mastodonAccount;
|
||||
account.user_id = mastodonAccount.id;
|
||||
//We check if user have really moderator rights
|
||||
if (requestedAdmin) {
|
||||
AdminVM adminVM = new ViewModelProvider(requireActivity()).get(AdminVM.class);
|
||||
adminVM.getAccount(account.instance, account.token, account.user_id).observe(requireActivity(), adminAccount -> {
|
||||
account.admin = adminAccount != null;
|
||||
((LoginActivity)requireActivity()).proceedLogin(requireActivity(), account);
|
||||
});
|
||||
} else {
|
||||
((LoginActivity)requireActivity()).proceedLogin(requireActivity(), account);
|
||||
}
|
||||
} else {
|
||||
Toasty.error(requireActivity(), getString(R.string.toast_fail_authenticate), Toast.LENGTH_LONG).show();
|
||||
}
|
||||
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
binding.continueButton.setEnabled(true);
|
||||
if (apiLogin != Account.API.PEERTUBE) {
|
||||
retrievesClientId(currentInstanceLogin);
|
||||
|
@ -243,7 +304,11 @@ public class FragmentLoginMain extends Fragment {
|
|||
return false;
|
||||
}
|
||||
});
|
||||
} else if (itemId == R.id.action_import_data) {
|
||||
} else if(itemId == R.id.action_use_token) {
|
||||
item.setChecked(!item.isChecked());
|
||||
binding.loginTokenLayout.setVisibility(item.isChecked()?View.VISIBLE:View.GONE);
|
||||
|
||||
}else if (itemId == R.id.action_import_data) {
|
||||
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.Q) {
|
||||
permissionLauncher.launch(Manifest.permission.WRITE_EXTERNAL_STORAGE);
|
||||
} else {
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:background="?android:windowBackground">
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageButton
|
||||
|
@ -35,7 +36,7 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_marginHorizontal="24dp"
|
||||
app:errorEnabled="true"
|
||||
app:layout_constraintBottom_toTopOf="@id/continue_button"
|
||||
app:layout_constraintBottom_toTopOf="@id/login_token_layout"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintVertical_chainStyle="packed">
|
||||
|
||||
|
@ -51,6 +52,30 @@
|
|||
android:singleLine="true" />
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
android:visibility="gone"
|
||||
tools:visibility="visible"
|
||||
android:id="@+id/login_token_layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginHorizontal="24dp"
|
||||
app:errorEnabled="true"
|
||||
app:layout_constraintBottom_toTopOf="@id/continue_button"
|
||||
app:layout_constraintTop_toBottomOf="@+id/login_instance_layout"
|
||||
app:layout_constraintVertical_chainStyle="packed">
|
||||
|
||||
<com.google.android.material.textfield.MaterialAutoCompleteTextView
|
||||
android:id="@+id/login_token"
|
||||
style="@style/Widget.Material3.TextInputEditText.FilledBox"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/instance_token"
|
||||
android:imeOptions="actionDone"
|
||||
android:inputType="text"
|
||||
android:singleLine="true" />
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/continue_button"
|
||||
android:layout_width="wrap_content"
|
||||
|
@ -60,7 +85,7 @@
|
|||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/login_instance_layout" />
|
||||
app:layout_constraintTop_toBottomOf="@id/login_token_layout" />
|
||||
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
android:id="@+id/no_account_q"
|
||||
|
|
|
@ -11,7 +11,11 @@
|
|||
android:checkable="true"
|
||||
android:title="@string/admin_scope"
|
||||
app:actionViewClass="android.widget.CheckBox" />
|
||||
|
||||
<item
|
||||
android:id="@+id/action_use_token"
|
||||
android:checkable="true"
|
||||
android:title="@string/use_token"
|
||||
app:actionViewClass="android.widget.CheckBox" />
|
||||
<item
|
||||
android:id="@+id/action_import_data"
|
||||
android:title="@string/import_data"
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
<string name="save">Save</string>
|
||||
<string name="instance">Instance</string>
|
||||
<string name="instance_example">Instance: mastodon.social</string>
|
||||
<string name="instance_token">Your token</string>
|
||||
<string name="toast_account_changed" formatted="false">Now works with the account %1$s</string>
|
||||
<string name="add_account">Add an account</string>
|
||||
<string name="clipboard">The content of the message has been copied to the clipboard</string>
|
||||
|
@ -200,6 +201,7 @@
|
|||
<string name="toast_error_internet">There is no Internet connection!</string>
|
||||
<string name="toast_code_error">An error occurred! The instance did not return an authorisation code!</string>
|
||||
<string name="toast_error_instance">The instance domain does not seem to be valid!</string>
|
||||
<string name="toast_error_token_empty">The token cannot be empty!</string>
|
||||
<string name="toast_error_loading_account">An error occurred while switching between accounts!</string>
|
||||
<string name="toast_error_search">An error occurred while searching!</string>
|
||||
<string name="nothing_to_do">No action can be taken</string>
|
||||
|
@ -1273,6 +1275,7 @@
|
|||
<string name="also_favourite_by">"Also favourited by: "</string>
|
||||
<string name="also_boosted_by">Also boosted by:</string>
|
||||
<string name="admin_scope">I am a moderator</string>
|
||||
<string name="use_token">Use a token</string>
|
||||
<string name="last_active">Last active</string>
|
||||
<string name="location">Location</string>
|
||||
<string name="staff">Staff</string>
|
||||
|
@ -1308,6 +1311,7 @@
|
|||
<string name="set_your_max_char_count">Set your max char count</string>
|
||||
<string name="release_notes">Release notes</string>
|
||||
<string name="toast_token">The app failed to get a token</string>
|
||||
<string name="toast_fail_authenticate">The app failed to authenticate the account!</string>
|
||||
<string name="media_cannot_be_uploaded">Media cannot be uploaded!</string>
|
||||
<string name="open_draft">Open draft</string>
|
||||
<string name="set_push_notifications_delay">Set the delay between each new fetch</string>
|
||||
|
|
Loading…
Reference in a new issue