.class public final Lcom/discord/utilities/auth/AuthUtils; .super Ljava/lang/Object; .source "AuthUtils.kt" # static fields .field public static final AUTHY_PACKAGE:Ljava/lang/String; = "com.authy.authy" .field public static final GOOGLE_AUTHENTICATOR_PACKAGE:Ljava/lang/String; = "com.google.android.apps.authenticator2" .field public static final HANDOFF_KEY:Ljava/lang/String; = "NOOP" .field public static final INSTANCE:Lcom/discord/utilities/auth/AuthUtils; .field public static final MAX_PASSWORD_LENGTH:I = 0x80 .field public static final MIN_PASSWORD_LENGTH:I = 0x6 .field public static final URL_AUTHY:Ljava/lang/String; = "https://play.google.com/store/apps/details?id=com.authy.authy" .field public static final URL_GOOGLE_AUTHENTICATOR:Ljava/lang/String; = "https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2" .field public static final URL_PLAY_STORE:Ljava/lang/String; = "https://play.google.com/store/apps/details" # direct methods .method public static constructor ()V .locals 1 new-instance v0, Lcom/discord/utilities/auth/AuthUtils; invoke-direct {v0}, Lcom/discord/utilities/auth/AuthUtils;->()V sput-object v0, Lcom/discord/utilities/auth/AuthUtils;->INSTANCE:Lcom/discord/utilities/auth/AuthUtils; return-void .end method .method public constructor ()V .locals 0 invoke-direct {p0}, Ljava/lang/Object;->()V return-void .end method .method public static final synthetic access$isValidEmail(Lcom/discord/utilities/auth/AuthUtils;Ljava/lang/String;)Z .locals 0 invoke-direct {p0, p1}, Lcom/discord/utilities/auth/AuthUtils;->isValidEmail(Ljava/lang/String;)Z move-result p0 return p0 .end method .method public static final broadcastAuthChangedEvent(Landroid/content/Context;ZJ)V .locals 5 const/4 v0, 0x0 if-eqz p0, :cond_2 const-wide/16 v1, 0x0 cmp-long v3, p2, v1 if-nez v3, :cond_0 return-void :cond_0 new-instance v1, Landroid/content/Intent; if-eqz p1, :cond_1 const-string v2, "com.discord.broadcast.LOGGED_IN" goto :goto_0 :cond_1 const-string v2, "com.discord.broadcast.LOGGED_OUT" :goto_0 invoke-direct {v1, v2}, Landroid/content/Intent;->(Ljava/lang/String;)V const-string v2, "com.discord.intent.extra.EXTRA_USER_ID" invoke-virtual {v1, v2, p2, p3}, Landroid/content/Intent;->putExtra(Ljava/lang/String;J)Landroid/content/Intent; sget-object v2, Lcom/discord/app/AppLog;->c:Lcom/discord/app/AppLog; new-instance v3, Ljava/lang/StringBuilder; invoke-direct {v3}, Ljava/lang/StringBuilder;->()V const-string v4, "Broadcasting auth event: isLoggedIn=" invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {v3, p1}, Ljava/lang/StringBuilder;->append(Z)Ljava/lang/StringBuilder; const-string p1, ", userId=" invoke-virtual {v3, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {v3, p2, p3}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder; invoke-virtual {v3}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object p1 const/4 p2, 0x2 invoke-static {v2, p1, v0, p2, v0}, Lcom/discord/utilities/logging/Logger;->d$default(Lcom/discord/utilities/logging/Logger;Ljava/lang/String;Ljava/lang/Throwable;ILjava/lang/Object;)V invoke-virtual {p0, v1}, Landroid/content/Context;->sendBroadcast(Landroid/content/Intent;)V return-void :cond_2 const-string p0, "context" invoke-static {p0}, Lt/u/b/j;->a(Ljava/lang/String;)V throw v0 .end method .method public static synthetic getWebHandoffUrl$default(Lcom/discord/utilities/auth/AuthUtils;Landroid/net/Uri;ZILjava/lang/Object;)Lrx/Observable; .locals 0 and-int/lit8 p3, p3, 0x2 if-eqz p3, :cond_0 const/4 p2, 0x0 :cond_0 invoke-virtual {p0, p1, p2}, Lcom/discord/utilities/auth/AuthUtils;->getWebHandoffUrl(Landroid/net/Uri;Z)Lrx/Observable; move-result-object p0 return-object p0 .end method .method private final isValidEmail(Ljava/lang/String;)Z .locals 3 invoke-interface {p1}, Ljava/lang/CharSequence;->length()I move-result v0 const/4 v1, 0x1 const/4 v2, 0x0 if-lez v0, :cond_0 const/4 v0, 0x1 goto :goto_0 :cond_0 const/4 v0, 0x0 :goto_0 if-eqz v0, :cond_1 sget-object v0, Landroid/util/Patterns;->EMAIL_ADDRESS:Ljava/util/regex/Pattern; invoke-virtual {v0, p1}, Ljava/util/regex/Pattern;->matcher(Ljava/lang/CharSequence;)Ljava/util/regex/Matcher; move-result-object p1 invoke-virtual {p1}, Ljava/util/regex/Matcher;->matches()Z move-result p1 if-eqz p1, :cond_1 goto :goto_1 :cond_1 const/4 v1, 0x0 :goto_1 return v1 .end method # virtual methods .method public final createDiscriminatorInputValidator(II)Lcom/discord/utilities/view/validators/InputValidator; .locals 1 .param p1 # I .annotation build Landroidx/annotation/StringRes; .end annotation .end param .param p2 # I .annotation build Landroidx/annotation/StringRes; .end annotation .end param .annotation system Ldalvik/annotation/Signature; value = { "(II)", "Lcom/discord/utilities/view/validators/InputValidator<", "Landroid/widget/EditText;", ">;" } .end annotation new-instance v0, Lcom/discord/utilities/auth/AuthUtils$createDiscriminatorInputValidator$1; invoke-direct {v0, p1, p2}, Lcom/discord/utilities/auth/AuthUtils$createDiscriminatorInputValidator$1;->(II)V return-object v0 .end method .method public final createEmailInputValidator(I)Lcom/discord/utilities/view/validators/BasicTextInputValidator; .locals 2 .param p1 # I .annotation build Landroidx/annotation/StringRes; .end annotation .end param new-instance v0, Lcom/discord/utilities/view/validators/BasicTextInputValidator; sget-object v1, Lcom/discord/utilities/auth/AuthUtils$createEmailInputValidator$1;->INSTANCE:Lcom/discord/utilities/auth/AuthUtils$createEmailInputValidator$1; invoke-direct {v0, p1, v1}, Lcom/discord/utilities/view/validators/BasicTextInputValidator;->(ILkotlin/jvm/functions/Function1;)V return-object v0 .end method .method public final createPasswordInputValidator(I)Lcom/discord/utilities/view/validators/BasicTextInputValidator; .locals 2 .param p1 # I .annotation build Landroidx/annotation/StringRes; .end annotation .end param new-instance v0, Lcom/discord/utilities/view/validators/BasicTextInputValidator; sget-object v1, Lcom/discord/utilities/auth/AuthUtils$createPasswordInputValidator$1;->INSTANCE:Lcom/discord/utilities/auth/AuthUtils$createPasswordInputValidator$1; invoke-direct {v0, p1, v1}, Lcom/discord/utilities/view/validators/BasicTextInputValidator;->(ILkotlin/jvm/functions/Function1;)V return-object v0 .end method .method public final encodeTotpSecret(Ljava/lang/String;)Ljava/lang/String; .locals 4 .annotation build Landroid/annotation/SuppressLint; value = { "DefaultLocale" } .end annotation if-eqz p1, :cond_1 const/4 v0, 0x0 const/4 v1, 0x4 const-string v2, " " const-string v3, "" invoke-static {p1, v2, v3, v0, v1}, Lt/a0/n;->replace$default(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZI)Ljava/lang/String; move-result-object p1 if-eqz p1, :cond_0 invoke-virtual {p1}, Ljava/lang/String;->toUpperCase()Ljava/lang/String; move-result-object p1 const-string v0, "(this as java.lang.String).toUpperCase()" invoke-static {p1, v0}, Lt/u/b/j;->checkExpressionValueIsNotNull(Ljava/lang/Object;Ljava/lang/String;)V invoke-static {p1}, Lt/a0/s;->trim(Ljava/lang/CharSequence;)Ljava/lang/CharSequence; move-result-object p1 invoke-virtual {p1}, Ljava/lang/Object;->toString()Ljava/lang/String; move-result-object p1 return-object p1 :cond_0 new-instance p1, Lt/l; const-string v0, "null cannot be cast to non-null type java.lang.String" invoke-direct {p1, v0}, Lt/l;->(Ljava/lang/String;)V throw p1 :cond_1 const-string p1, "secret" invoke-static {p1}, Lt/u/b/j;->a(Ljava/lang/String;)V const/4 p1, 0x0 throw p1 .end method .method public final generateNewTotpKey()Ljava/lang/String; .locals 6 .annotation build Landroid/annotation/SuppressLint; value = { "DefaultLocale" } .end annotation invoke-static {}, Lcom/discord/utilities/time/ClockFactory;->get()Lcom/discord/utilities/time/Clock; move-result-object v0 invoke-interface {v0}, Lcom/discord/utilities/time/Clock;->currentTimeMillis()J move-result-wide v0 new-instance v2, Lt/w/d; long-to-int v3, v0 const/16 v4, 0x20 shr-long/2addr v0, v4 long-to-int v1, v0 invoke-direct {v2, v3, v1}, Lt/w/d;->(II)V const/16 v0, 0xa invoke-virtual {v2, v0}, Lt/w/c;->nextBytes(I)[B move-result-object v0 new-instance v1, Lz/a/a/a/d/a; invoke-direct {v1}, Lz/a/a/a/d/a;->()V const/4 v2, 0x0 if-eqz v0, :cond_2 array-length v3, v0 if-nez v3, :cond_0 goto :goto_0 :cond_0 new-instance v3, Lz/a/a/a/d/b$a; invoke-direct {v3}, Lz/a/a/a/d/b$a;->()V array-length v4, v0 invoke-virtual {v1, v0, v2, v4, v3}, Lz/a/a/a/d/b;->a([BIILz/a/a/a/d/b$a;)V const/4 v4, -0x1 invoke-virtual {v1, v0, v2, v4, v3}, Lz/a/a/a/d/b;->a([BIILz/a/a/a/d/b$a;)V iget v0, v3, Lz/a/a/a/d/b$a;->d:I iget v1, v3, Lz/a/a/a/d/b$a;->e:I sub-int/2addr v0, v1 new-array v1, v0, [B array-length v4, v1 iget-object v5, v3, Lz/a/a/a/d/b$a;->c:[B if-eqz v5, :cond_1 invoke-static {v0, v4}, Ljava/lang/Math;->min(II)I move-result v0 iget-object v4, v3, Lz/a/a/a/d/b$a;->c:[B iget v5, v3, Lz/a/a/a/d/b$a;->e:I invoke-static {v4, v5, v1, v2, v0}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V iget v4, v3, Lz/a/a/a/d/b$a;->e:I add-int/2addr v4, v0 iput v4, v3, Lz/a/a/a/d/b$a;->e:I iget v0, v3, Lz/a/a/a/d/b$a;->e:I iget v4, v3, Lz/a/a/a/d/b$a;->d:I if-lt v0, v4, :cond_1 const/4 v0, 0x0 iput-object v0, v3, Lz/a/a/a/d/b$a;->c:[B :cond_1 move-object v0, v1 :cond_2 :goto_0 invoke-static {v0}, Lu/a/a2/w;->a([B)Ljava/lang/String; move-result-object v0 const-string v1, "utf-8" invoke-static {v0, v1}, Ljava/net/URLEncoder;->encode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; move-result-object v0 const-string v1, "URLEncoder\n .enco\u2026ring(byteArray), \"utf-8\")" invoke-static {v0, v1}, Lt/u/b/j;->checkExpressionValueIsNotNull(Ljava/lang/Object;Ljava/lang/String;)V const/4 v1, 0x4 const-string v3, "=" const-string v4, "" invoke-static {v0, v3, v4, v2, v1}, Lt/a0/n;->replace$default(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZI)Ljava/lang/String; move-result-object v0 if-eqz v0, :cond_4 invoke-virtual {v0}, Ljava/lang/String;->toLowerCase()Ljava/lang/String; move-result-object v0 const-string v3, "(this as java.lang.String).toLowerCase()" invoke-static {v0, v3}, Lt/u/b/j;->checkExpressionValueIsNotNull(Ljava/lang/Object;Ljava/lang/String;)V invoke-static {v0}, Lt/a0/s;->trim(Ljava/lang/CharSequence;)Ljava/lang/CharSequence; move-result-object v0 invoke-virtual {v0}, Ljava/lang/Object;->toString()Ljava/lang/String; move-result-object v0 new-instance v3, Ljava/lang/StringBuilder; invoke-direct {v3, v0}, Ljava/lang/StringBuilder;->(Ljava/lang/String;)V const/4 v0, 0x3 new-array v0, v0, [Ljava/lang/Integer; const/16 v4, 0xc invoke-static {v4}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer; move-result-object v4 aput-object v4, v0, v2 const/4 v2, 0x1 const/16 v4, 0x8 invoke-static {v4}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer; move-result-object v4 aput-object v4, v0, v2 const/4 v2, 0x2 invoke-static {v1}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer; move-result-object v1 aput-object v1, v0, v2 invoke-static {v0}, Le/k/a/b/e/p/g;->listOf([Ljava/lang/Object;)Ljava/util/List; move-result-object v0 invoke-interface {v0}, Ljava/lang/Iterable;->iterator()Ljava/util/Iterator; move-result-object v0 :goto_1 invoke-interface {v0}, Ljava/util/Iterator;->hasNext()Z move-result v1 if-eqz v1, :cond_3 invoke-interface {v0}, Ljava/util/Iterator;->next()Ljava/lang/Object; move-result-object v1 check-cast v1, Ljava/lang/Number; invoke-virtual {v1}, Ljava/lang/Number;->intValue()I move-result v1 const-string v2, " " invoke-virtual {v3, v1, v2}, Ljava/lang/StringBuilder;->insert(ILjava/lang/String;)Ljava/lang/StringBuilder; goto :goto_1 :cond_3 invoke-virtual {v3}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v0 const-string v1, "builder.toString()" invoke-static {v0, v1}, Lt/u/b/j;->checkExpressionValueIsNotNull(Ljava/lang/Object;Ljava/lang/String;)V return-object v0 :cond_4 new-instance v0, Lt/l; const-string v1, "null cannot be cast to non-null type java.lang.String" invoke-direct {v0, v1}, Lt/l;->(Ljava/lang/String;)V throw v0 .end method .method public final getBillingWebHandoffUrl(Landroid/net/Uri;)Lrx/Observable; .locals 1 .annotation system Ldalvik/annotation/Signature; value = { "(", "Landroid/net/Uri;", ")", "Lrx/Observable<", "Landroid/net/Uri;", ">;" } .end annotation if-eqz p1, :cond_0 const/4 v0, 0x1 invoke-virtual {p0, p1, v0}, Lcom/discord/utilities/auth/AuthUtils;->getWebHandoffUrl(Landroid/net/Uri;Z)Lrx/Observable; move-result-object p1 return-object p1 :cond_0 const-string p1, "redirectUrl" invoke-static {p1}, Lt/u/b/j;->a(Ljava/lang/String;)V const/4 p1, 0x0 throw p1 .end method .method public final getWebHandoffUrl(Landroid/net/Uri;Z)Lrx/Observable; .locals 8 .annotation system Ldalvik/annotation/Signature; value = { "(", "Landroid/net/Uri;", "Z)", "Lrx/Observable<", "Landroid/net/Uri;", ">;" } .end annotation if-eqz p1, :cond_0 sget-object v0, Lcom/discord/stores/StoreStream;->Companion:Lcom/discord/stores/StoreStream$Companion; invoke-virtual {v0}, Lcom/discord/stores/StoreStream$Companion;->getAuthentication()Lcom/discord/stores/StoreAuthentication; move-result-object v0 const-string v1, "NOOP" invoke-virtual {v0, v1}, Lcom/discord/stores/StoreAuthentication;->startHandOffProcess(Ljava/lang/String;)Lrx/Observable; move-result-object v2 const-wide/16 v3, 0x2710 const/4 v5, 0x0 const/4 v6, 0x2 const/4 v7, 0x0 invoke-static/range {v2 .. v7}, Lcom/discord/utilities/rx/ObservableExtensionsKt;->takeSingleUntilTimeout$default(Lrx/Observable;JZILjava/lang/Object;)Lrx/Observable; move-result-object v0 new-instance v1, Lcom/discord/utilities/auth/AuthUtils$getWebHandoffUrl$1; invoke-direct {v1, p2, p1}, Lcom/discord/utilities/auth/AuthUtils$getWebHandoffUrl$1;->(ZLandroid/net/Uri;)V invoke-virtual {v0, v1}, Lrx/Observable;->f(Lb0/l/i;)Lrx/Observable; move-result-object p1 const-string p2, "StoreStream.getAuthentic\u2026 handoffUrl\n }" invoke-static {p1, p2}, Lt/u/b/j;->checkExpressionValueIsNotNull(Ljava/lang/Object;Ljava/lang/String;)V return-object p1 :cond_0 const-string p1, "redirectUrl" invoke-static {p1}, Lt/u/b/j;->a(Ljava/lang/String;)V const/4 p1, 0x0 throw p1 .end method .method public final isValidPasswordLength(Ljava/lang/String;)Z .locals 2 if-eqz p1, :cond_2 const/16 v0, 0x80 const/4 v1, 0x6 invoke-virtual {p1}, Ljava/lang/String;->length()I move-result p1 if-le v1, p1, :cond_0 goto :goto_0 :cond_0 if-lt v0, p1, :cond_1 const/4 p1, 0x1 goto :goto_1 :cond_1 :goto_0 const/4 p1, 0x0 :goto_1 return p1 :cond_2 const-string p1, "password" invoke-static {p1}, Lt/u/b/j;->a(Ljava/lang/String;)V const/4 p1, 0x0 throw p1 .end method