Fix authentication

This commit is contained in:
Thomas 2023-01-23 17:05:54 +01:00
parent 82a5bfebb4
commit 1b429a31a2
5 changed files with 43 additions and 15 deletions

View File

@ -14,6 +14,7 @@ package app.fedilab.android.peertube.activities;
* You should have received a copy of the GNU General Public License along with TubeLab; if not,
* see <http://www.gnu.org/licenses>. */
import static app.fedilab.android.mastodon.helper.Helper.TAG;
import static app.fedilab.android.peertube.client.RetrofitPeertubeAPI.updateCredential;
import android.annotation.SuppressLint;
@ -24,6 +25,7 @@ import android.text.SpannableString;
import android.text.Spanned;
import android.text.style.ForegroundColorSpan;
import android.text.style.UnderlineSpan;
import android.util.Log;
import android.util.Patterns;
import android.view.MenuItem;
import android.view.View;
@ -161,7 +163,8 @@ public class LoginActivity extends BaseBarActivity {
}
client_id = oauth.getClient_id();
client_secret = oauth.getClient_secret();
Log.v(TAG, "client_id: " + client_id);
Log.v(TAG, "client_secret: " + client_secret);
SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE);
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putString(Helper.CLIENT_ID, client_id);
@ -180,6 +183,7 @@ public class LoginActivity extends BaseBarActivity {
}
try {
Token token = new RetrofitPeertubeAPI(LoginActivity.this, finalInstance, null).manageToken(oauthParams);
Log.v(TAG, "token: " + token);
proceedLogin(token, finalInstance);
} catch (final Exception e) {
oauthParams.setUsername(binding.loginUid.getText().toString().toLowerCase().trim());
@ -191,6 +195,11 @@ public class LoginActivity extends BaseBarActivity {
}
proceedLogin(token, finalInstance);
} catch (Error e) {
runOnUiThread(() -> {
Toasty.error(LoginActivity.this, e.getError() != null && !e.getError().isEmpty() ? e.getError() : getString(R.string.toast_error), Toasty.LENGTH_SHORT).show();
binding.loginButton.setEnabled(true);
});
e.printStackTrace();
}
}

View File

@ -48,6 +48,7 @@ import androidx.viewpager.widget.PagerAdapter;
import androidx.viewpager.widget.ViewPager;
import com.google.android.material.bottomnavigation.BottomNavigationView;
import com.kobakei.ratethisapp.RateThisApp;
import org.jetbrains.annotations.NotNull;
@ -59,6 +60,7 @@ import java.util.TreeSet;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import app.fedilab.android.BuildConfig;
import app.fedilab.android.R;
import app.fedilab.android.activities.AboutActivity;
import app.fedilab.android.activities.PeertubeBaseMainActivity;
@ -89,7 +91,7 @@ import app.fedilab.android.sqlite.Sqlite;
import es.dmoral.toasty.Toasty;
public abstract class PeertubeMainActivity extends PeertubeBaseMainActivity {
public class PeertubeMainActivity extends PeertubeBaseMainActivity {
public static int PICK_INSTANCE = 5641;
@ -188,7 +190,6 @@ public abstract class PeertubeMainActivity extends PeertubeBaseMainActivity {
alert.show();
}
protected abstract void rateThisApp();
private void setTitleCustom(int titleRId) {
Toolbar toolbar = findViewById(R.id.toolbar);
@ -313,7 +314,11 @@ public abstract class PeertubeMainActivity extends PeertubeBaseMainActivity {
peertubeInformation.setTranslations(new LinkedHashMap<>());
startInForeground();
rateThisApp();
//noinspection ConstantConditions
if (BuildConfig.FLAVOR.compareTo("playstore") == 0) {
RateThisApp.onCreate(this);
RateThisApp.showRateDialogIfNeeded(this);
}
final SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);

View File

@ -17,6 +17,7 @@ package app.fedilab.android.peertube.client;
import static app.fedilab.android.mastodon.helper.Helper.PREF_INSTANCE;
import static app.fedilab.android.mastodon.helper.Helper.PREF_USER_ID;
import static app.fedilab.android.mastodon.helper.Helper.PREF_USER_TOKEN;
import static app.fedilab.android.mastodon.helper.Helper.TAG;
import android.app.Activity;
import android.content.Context;
@ -26,6 +27,7 @@ import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;
import android.webkit.MimeTypeMap;
import android.webkit.URLUtil;
@ -156,6 +158,7 @@ public class RetrofitPeertubeAPI {
String instance = host;
try {
UserMe userMe = new RetrofitPeertubeAPI(activity, instance, token).verifyCredentials();
Log.v(TAG, "userMe: " + userMe);
peertubeAccount = userMe.getAccount();
} catch (Error error) {
Error.displayError(activity, error);
@ -173,6 +176,7 @@ public class RetrofitPeertubeAPI {
account.client_secret = client_secret;
account.refresh_token = refresh_token;
account.instance = instance;
account.api = Account.API.PEERTUBE;
account.peertube_account = peertubeAccount;
SQLiteDatabase db = Sqlite.getInstance(activity.getApplicationContext(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
boolean userExists = false;
@ -238,14 +242,13 @@ public class RetrofitPeertubeAPI {
public Token manageToken(OauthParams oauthParams) throws Error {
PeertubeService peertubeService = init();
Call<Token> refreshTokenCall = null;
if (oauthParams.getExternalAuthToken() != null) {
refreshTokenCall = peertubeService.createOpenIdToken(oauthParams.getClient_id(), oauthParams.getClient_secret(), oauthParams.getResponse_type(), oauthParams.getGrant_type(), oauthParams.getScope(), oauthParams.getUsername(), oauthParams.getPassword(), oauthParams.getExternalAuthToken());
} else if (oauthParams.getGrant_type().compareTo("password") == 0) {
if (oauthParams.getGrant_type().compareTo("password") == 0) {
refreshTokenCall = peertubeService.createToken(oauthParams.getClient_id(), oauthParams.getClient_secret(), oauthParams.getGrant_type(), oauthParams.getUsername(), oauthParams.getPassword());
} else if (oauthParams.getGrant_type().compareTo("refresh_token") == 0) {
refreshTokenCall = peertubeService.refreshToken(oauthParams.getClient_id(), oauthParams.getClient_secret(), oauthParams.getRefresh_token(), oauthParams.getGrant_type());
}
if (refreshTokenCall != null) {
Log.v(TAG, "request: " + refreshTokenCall.request());
try {
Response<Token> response = refreshTokenCall.execute();
if (response.isSuccessful()) {
@ -264,6 +267,7 @@ public class RetrofitPeertubeAPI {
} else {
Error error = new Error();
error.setStatusCode(response.code());
Log.v(TAG, "err: " + response.errorBody().string());
if (response.errorBody() != null) {
error.setError(response.errorBody().string());
} else {

View File

@ -56,7 +56,7 @@ public class UserMe {
@SerializedName("nsfwPolicy")
private String nsfwPolicy;
@SerializedName("role")
private int role;
private Role role;
@SerializedName("roleLabel")
private String roleLabel;
@SerializedName("username")
@ -74,6 +74,11 @@ public class UserMe {
@SerializedName("webTorrentEnabled")
private boolean webTorrentEnabled;
public Role getRole() {
return role;
}
public PeertubeAccount getAccount() {
return account;
}
@ -186,12 +191,15 @@ public class UserMe {
this.nsfwPolicy = nsfwPolicy;
}
public int getRole() {
return role;
public void setRole(Role role) {
this.role = role;
}
public void setRole(int role) {
this.role = role;
public static class Role {
@SerializedName("id")
String id;
@SerializedName("label")
String label;
}
public String getRoleLabel() {

View File

@ -115,7 +115,6 @@ public class Helper {
public static final String REDIRECT_CONTENT_WEB = "tubelab://backtotubelab";
public static final int DEFAULT_VIDEO_CACHE_MB = 100;
@SuppressWarnings({"unused", "RedundantSuppression"})
public static final String TAG = "TubeLab";
public static final String ID = "id";
public static final String CLIENT_ID = "client_id";
public static final String CLIENT_SECRET = "client_secret";
@ -668,11 +667,14 @@ public class Helper {
public static boolean isVideoOwner(Context context, VideoData.Video video) {
SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE);
String userId = sharedpreferences.getString(PREF_USER_ID, "");
String instance = sharedpreferences.getString(PREF_INSTANCE, "");
String userId = sharedpreferences.getString(PREF_USER_ID, null);
String instance = sharedpreferences.getString(PREF_INSTANCE, null);
if (video == null) {
return false;
}
if (userId == null || instance == null) {
return false;
}
AccountData.PeertubeAccount account = video.getAccount();
ChannelData.Channel channel = video.getChannel();
if (account != null) {