Commit f8ebd343 authored by Thomas's avatar Thomas
Browse files

Allow to login with a token

parent 020be16f
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -100,9 +100,11 @@ public class PushHelper {
                WorkManager.getInstance(context).cancelAllWorkByTag(Helper.WORKER_REFRESH_NOTIFICATION);
                new Thread(() -> {
                    List<BaseAccount> accounts = new Account(context).getPushNotificationAccounts();
                    if(accounts != null) {
                        for (BaseAccount account : accounts) {
                            ((Activity) context).runOnUiThread(() -> UnifiedPush.unregister(context, account.user_id + "@" + account.instance));
                        }
                    }
                }).start();
                break;
        }
+1 −1
Original line number Diff line number Diff line
@@ -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;
+68 −3
Original line number Diff line number Diff line
@@ -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,6 +304,10 @@ public class FragmentLoginMain extends Fragment {
                        return false;
                    }
                });
            } 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);
+27 −2
Original line number Diff line number Diff line
@@ -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"
+5 −1
Original line number Diff line number Diff line
@@ -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"
Loading