Guest User

Untitled

a guest
Oct 16th, 2018
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 23.18 KB | None | 0 0
  1. /**
  2. * Titanium Firebase Auth
  3. * Appcelerator Titanium Mobile
  4. * Copyright (c) 2018-present by Hans Knöchel. All Rights Reserved.
  5. * Licensed under the terms of the Apache Public License
  6. * Please see the LICENSE included with this distribution for details.
  7. *
  8. */
  9. package firebase.auth;
  10.  
  11. import org.appcelerator.kroll.KrollModule;
  12. import org.appcelerator.kroll.KrollDict;
  13. import org.appcelerator.kroll.KrollFunction;
  14. import org.appcelerator.kroll.annotations.Kroll;
  15. import org.appcelerator.titanium.TiApplication;
  16. import org.appcelerator.kroll.common.Log;
  17. import org.appcelerator.kroll.common.TiConfig;
  18.  
  19. import java.util.List;
  20. import java.util.concurrent.TimeUnit;
  21.  
  22. import com.google.firebase.FirebaseApp;
  23. import com.google.firebase.FirebaseException;
  24. import com.google.firebase.FirebaseTooManyRequestsException;
  25.  
  26. import android.app.Activity;
  27. import android.net.Uri;
  28.  
  29. import com.google.android.gms.tasks.OnCompleteListener;
  30. import com.google.android.gms.tasks.OnFailureListener;
  31. import com.google.android.gms.tasks.OnSuccessListener;
  32. import com.google.android.gms.tasks.Task;
  33. import com.google.firebase.auth.AuthCredential;
  34. import com.google.firebase.auth.AuthResult;
  35. import com.google.firebase.auth.FirebaseAuth;
  36. import com.google.firebase.auth.FirebaseAuthInvalidCredentialsException;
  37. import com.google.firebase.auth.FirebaseUser;
  38. import com.google.firebase.auth.GetTokenResult;
  39. import com.google.firebase.auth.GithubAuthProvider;
  40. import com.google.firebase.auth.PhoneAuthCredential;
  41. import com.google.firebase.auth.PhoneAuthProvider;
  42. import com.google.firebase.auth.ProviderQueryResult;
  43. import com.google.firebase.auth.UserProfileChangeRequest;
  44.  
  45. @Kroll.module(name = "TitaniumFirebaseAuth", id = "firebase.auth")
  46. public class TitaniumFirebaseAuthModule extends KrollModule {
  47. private static final String LCAT = "TitaniumFirebaseAuthModule";
  48.  
  49. public FirebaseAuth firebaseAuth;
  50. private PhoneAuthProvider.ForceResendingToken mResendToken;
  51. private PhoneAuthProvider.OnVerificationStateChangedCallbacks verifyPhoneNumberCallbacks;
  52.  
  53. @Kroll.constant
  54. public static final int AUTH_PROVIDER_TYPE_UNKNOWN = 0;
  55.  
  56. @Kroll.constant
  57. public static final int AUTH_PROVIDER_TYPE_FACEBOOK = 1;
  58.  
  59. @Kroll.constant
  60. public static final int AUTH_PROVIDER_TYPE_TWITTER = 2;
  61.  
  62. @Kroll.constant
  63. public static final int AUTH_PROVIDER_TYPE_GOOGLE = 3;
  64.  
  65. @Kroll.constant
  66. public static final int AUTH_PROVIDER_TYPE_GITHUB = 4;
  67.  
  68. @Kroll.constant
  69. public static final int AUTH_PROVIDER_TYPE_PASSWORD = 5;
  70.  
  71. @Kroll.constant
  72. public static final int AUTH_PROVIDER_TYPE_PHONE = 6;
  73.  
  74. @Kroll.constant
  75. public static final int AUTH_PROVIDER_TYPE_OAUTH = 7;
  76.  
  77. @Kroll.constant
  78. public static final int SMS_INVALID_REQUEST = 0;
  79.  
  80. @Kroll.constant
  81. public static final int SMS_QUOTA_EXCEEDED = 1;
  82.  
  83. @Kroll.constant
  84. public static final String TESTNUMBER = "+494060812460";
  85.  
  86. private KrollFunction authStateDidChangeCallback;
  87.  
  88. public TitaniumFirebaseAuthModule() {
  89. super();
  90. }
  91.  
  92. @Override
  93. public void onStart(Activity activity) {
  94. // FirebaseApp.initializeApp(TiApplication.getInstance().getApplicationContext());
  95. firebaseAuth = FirebaseAuth.getInstance();
  96.  
  97. verifyPhoneNumberCallbacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
  98. @Override
  99. public void onVerificationCompleted(PhoneAuthCredential credential) {
  100. Log.d(LCAT, "onVerificationCompleted");
  101. signInWithPhoneAuthCredential(credential);
  102. }
  103.  
  104. @Override
  105. public void onCodeAutoRetrievalTimeOut(String verificationId) {
  106. }
  107.  
  108. @Override
  109. public void onCodeSent(String verificationId,
  110. PhoneAuthProvider.ForceResendingToken token) {
  111. Log.d(LCAT, "onCodeSent");
  112. mResendToken = token;
  113. if (onCodeSentCallback != null) {
  114. KrollDict event = new KrollDict();
  115. event.put("verificationId", verificationId);
  116. event.put("resendToken", new ResendTokenProxy(token));
  117. onCodeSentCallback.callAsync(getKrollObject(), event);
  118. }
  119.  
  120. }
  121.  
  122. @Override
  123. public void onVerificationFailed(FirebaseException e) {
  124. Log.d(LCAT, "onVerificationFailed");
  125. KrollDict event = new KrollDict();
  126. if (e instanceof FirebaseAuthInvalidCredentialsException) {
  127. event.put("message", "Invalid request");
  128. event.put("code", SMS_INVALID_REQUEST);
  129. } else if (e instanceof FirebaseTooManyRequestsException) {
  130. event.put("code", SMS_QUOTA_EXCEEDED);
  131. event.put("message",
  132. "The SMS quota for the project has been exceeded");
  133. }
  134. onErrorCallback.callAsync(getKrollObject(), event);
  135. }
  136.  
  137. };
  138.  
  139. super.onStart(activity);
  140. }
  141.  
  142. @Kroll.method
  143. public void fetchProviders(KrollDict params) {
  144. String email = (String) params.get("email");
  145. final KrollFunction callback = (KrollFunction) params.get("callback");
  146.  
  147. firebaseAuth.fetchProvidersForEmail(email).addOnCompleteListener(
  148. new OnCompleteListener<ProviderQueryResult>() {
  149. @Override
  150. public void onComplete(Task<ProviderQueryResult> task) {
  151. KrollDict event = new KrollDict();
  152. event.put("success", task.isSuccessful());
  153.  
  154. if (task.isSuccessful()) {
  155. List<String> providers = task.getResult()
  156. .getProviders();
  157. String[] result = new String[providers.size()];
  158. event.put("providers", providers.toArray(result));
  159. } else {
  160. event.put("code", 0);
  161. event.put("description", task.getException()
  162. .getMessage());
  163. }
  164. callback.callAsync(getKrollObject(), event);
  165. }
  166. });
  167. }
  168.  
  169. @Kroll.method
  170. public void createUserWithEmail(KrollDict params) {
  171. String email = (String) params.get("email");
  172. String password = (String) params.get("password");
  173. final KrollFunction callback = (KrollFunction) params.get("callback");
  174. Activity activity = TiApplication.getInstance().getCurrentActivity();
  175. firebaseAuth.createUserWithEmailAndPassword(email, password)
  176. .addOnCompleteListener(activity,
  177. new OnCompleteListener<AuthResult>() {
  178. @Override
  179. public void onComplete(Task<AuthResult> task) {
  180. KrollDict event = new KrollDict();
  181. event.put("success", task.isSuccessful());
  182.  
  183. if (task.isSuccessful()) {
  184. event.put("user",
  185. dictionaryFromUser(firebaseAuth
  186. .getCurrentUser()));
  187. } else {
  188. event.put("code", 0);
  189. event.put("description", task
  190. .getException().getMessage());
  191. }
  192. callback.callAsync(getKrollObject(), event);
  193. }
  194. });
  195. }
  196.  
  197. @Kroll.method
  198. public void signInWithEmail(KrollDict params) {
  199. String email = (String) params.get("email");
  200. String password = (String) params.get("password");
  201. final KrollFunction callback = (KrollFunction) params.get("callback");
  202.  
  203. firebaseAuth.signInWithEmailAndPassword(email, password)
  204. .addOnSuccessListener(new OnSuccessListener<AuthResult>() {
  205. @Override
  206. public void onSuccess(AuthResult authResult) {
  207. KrollDict event = new KrollDict();
  208. event.put("success", true);
  209. event.put("user", dictionaryFromUser(firebaseAuth
  210. .getCurrentUser()));
  211. callback.callAsync(getKrollObject(), event);
  212. }
  213. }).addOnFailureListener(new OnFailureListener() {
  214. @Override
  215. public void onFailure(Exception exception) {
  216. KrollDict event = new KrollDict();
  217. event.put("success", false);
  218. event.put("code", 0);
  219. event.put("description", exception.getMessage());
  220. callback.callAsync(getKrollObject(), event);
  221. }
  222. });
  223. }
  224.  
  225. @Kroll.method
  226. public void signInWithCredential(KrollDict params) {
  227. TitaniumFirebaseAuthCredentialProxy credential = (TitaniumFirebaseAuthCredentialProxy) params
  228. .get("credential");
  229. final KrollFunction callback = (KrollFunction) params.get("callback");
  230.  
  231. firebaseAuth.signInWithCredential(credential.getCredential())
  232. .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
  233. @Override
  234. public void onComplete(Task<AuthResult> task) {
  235. KrollDict event = new KrollDict();
  236. event.put("success", task.isSuccessful());
  237.  
  238. if (task.isSuccessful()) {
  239. event.put("user", dictionaryFromUser(firebaseAuth
  240. .getCurrentUser()));
  241. } else {
  242. event.put("code", 0);
  243. event.put("description", task.getException()
  244. .getMessage());
  245. }
  246. callback.callAsync(getKrollObject(), event);
  247. }
  248. });
  249. }
  250.  
  251. @Kroll.method
  252. public void signInAnonymously(final KrollFunction callback) {
  253. firebaseAuth.signInAnonymously()
  254. .addOnSuccessListener(new OnSuccessListener<AuthResult>() {
  255. @Override
  256. public void onSuccess(AuthResult authResult) {
  257. KrollDict event = new KrollDict();
  258. event.put("success", true);
  259. event.put("user", dictionaryFromUser(firebaseAuth
  260. .getCurrentUser()));
  261. callback.callAsync(getKrollObject(), event);
  262. }
  263. }).addOnFailureListener(new OnFailureListener() {
  264. @Override
  265. public void onFailure(Exception exception) {
  266. KrollDict event = new KrollDict();
  267. event.put("success", false);
  268. event.put("code", 0);
  269. event.put("description", exception.getMessage());
  270. callback.callAsync(getKrollObject(), event);
  271. }
  272. });
  273. }
  274.  
  275. /* schleera : */
  276.  
  277. private KrollFunction onCodeSentCallback;
  278. private KrollFunction onErrorCallback;
  279. private KrollFunction onVerificationCompletedCallback;
  280. private PhoneAuthProvider.ForceResendingToken resendToken;
  281.  
  282. /* Start verifying by phone number SMS */
  283. @Kroll.method
  284. public void verifyPhoneNumber(KrollDict opts) {
  285. Log.d(LCAT, opts.toString());
  286. String phoneNumber = TESTNUMBER;
  287. int timeout = 300000;
  288. if (opts.containsKeyAndNotNull("phoneNumber")) {
  289. phoneNumber = opts.getString("phoneNumber");
  290. }
  291. if (opts.containsKeyAndNotNull("timeout")) {
  292. timeout = opts.getInt("timeout");
  293. }
  294. if (opts.containsKeyAndNotNull("oncodesent")) {
  295. Object o = opts.get("oncodesent");
  296. if (o instanceof KrollFunction) {
  297. onCodeSentCallback = (KrollFunction) o;
  298. }
  299. }
  300. if (opts.containsKeyAndNotNull("onverificationcompleted")) {
  301. Object o = opts.get("onverificationcompleted");
  302. if (o instanceof KrollFunction) {
  303. onVerificationCompletedCallback = (KrollFunction) o;
  304. }
  305. }
  306. if (opts.containsKeyAndNotNull("onerror")) {
  307. Object o = opts.get("onerror");
  308. if (o instanceof KrollFunction) {
  309. onErrorCallback = (KrollFunction) o;
  310. }
  311. }
  312. PhoneAuthProvider.getInstance().verifyPhoneNumber(//
  313. phoneNumber, //
  314. timeout, //
  315. TimeUnit.MILLISECONDS,//
  316. TiApplication.getInstance().getCurrentActivity(), //
  317. verifyPhoneNumberCallbacks);
  318. }
  319.  
  320. @Kroll.method
  321. public void verifyPhoneNumberWithCode(String verificationId, String code) {
  322. PhoneAuthCredential credential = PhoneAuthProvider.getCredential(
  323. verificationId, code);
  324. signInWithPhoneAuthCredential(credential);
  325. }
  326.  
  327. @Kroll.method
  328. public void resendVerificationCode(String phoneNumber) {
  329. PhoneAuthProvider.getInstance().verifyPhoneNumber(phoneNumber,
  330. 60, // Timeout
  331. TimeUnit.SECONDS, // Unit of timeout
  332. TiApplication.getInstance().getCurrentActivity(),
  333. verifyPhoneNumberCallbacks, // OnVerificationStateChangedCallbacks
  334. mResendToken); // ForceResendingToken from callbacks
  335. }
  336.  
  337. @Kroll.method
  338. public KrollDict checkCurrentUser() {
  339. FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
  340. return (user != null) ? dictionaryFromUser(user) : null;
  341. }
  342.  
  343. private KrollFunction onProfileUpdateCompleteCallback = null;
  344.  
  345. @Kroll.method
  346. public void updateProfile(KrollDict opts) {
  347. String displayName = null;
  348. String photoUrl = null;
  349. String email = null;
  350. String password = null;
  351.  
  352. FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
  353. if (user == null)
  354. return;
  355. if (opts.containsKeyAndNotNull("oncomplete")) {
  356. onProfileUpdateCompleteCallback = (KrollFunction) opts
  357. .get("onComplete");
  358. }
  359. if (opts.containsKeyAndNotNull("displayName")) {
  360. displayName = opts.getString("displayName");
  361. }
  362. if (opts.containsKeyAndNotNull("photoUrl")) {
  363. photoUrl = opts.getString("photoUrl");
  364. }
  365. if (opts.containsKeyAndNotNull("email")) {
  366. email = opts.getString("email");
  367. }
  368. if (opts.containsKeyAndNotNull("password")) {
  369. password = opts.getString("password");
  370. }
  371. if (displayName != null || photoUrl != null) {
  372. UserProfileChangeRequest.Builder builder = new UserProfileChangeRequest.Builder();
  373. if (displayName != null)
  374. builder.setDisplayName(displayName);
  375. if (photoUrl != null)
  376. builder.setPhotoUri(Uri.parse(photoUrl));
  377. UserProfileChangeRequest profileUpdates = builder.build();
  378. user.updateProfile(profileUpdates)
  379. .addOnCompleteListener(new OnCompleteListener<Void>() {
  380. @Override
  381. public void onComplete(@NonNull Task<Void> task) {
  382. if (task.isSuccessful()
  383. && onProfileUpdateCompleteCallback != null) {
  384. KrollDict event = new KrollDict();
  385. event.put("success", true);
  386. onProfileUpdateCompleteCallback.callAsync(
  387. getKrollObject(), event);
  388. }
  389. }
  390. }).addOnFailureListener(new OnFailureListener() {
  391. @Override
  392. public void onFailure(@NonNull Exception e) {
  393. if (onProfileUpdateCompleteCallback != null) {
  394. KrollDict event = new KrollDict();
  395. event.put("success", false);
  396. event.put("types", "profile");
  397. onProfileUpdateCompleteCallback.callAsync(
  398. getKrollObject(), event);
  399. }
  400. }
  401. });
  402.  
  403. }
  404. if (email != null) {
  405. user.updateEmail(email)
  406. .addOnCompleteListener(new OnCompleteListener<Void>() {
  407. @Override
  408. public void onComplete(@NonNull Task<Void> task) {
  409. if (task.isSuccessful()
  410. && onProfileUpdateCompleteCallback != null) {
  411. KrollDict event = new KrollDict();
  412. event.put("success", true);
  413. onProfileUpdateCompleteCallback.callAsync(
  414. getKrollObject(), event);
  415. }
  416. }
  417. }).addOnFailureListener(new OnFailureListener() {
  418. @Override
  419. public void onFailure(@NonNull Exception e) {
  420. if (onProfileUpdateCompleteCallback != null) {
  421. KrollDict event = new KrollDict();
  422. event.put("success", false);
  423. event.put("types", "email");
  424. onProfileUpdateCompleteCallback.callAsync(
  425. getKrollObject(), event);
  426. }
  427. }
  428. });
  429. }
  430. if (password != null) {
  431. user.updateEmail(password)
  432. .addOnCompleteListener(new OnCompleteListener<Void>() {
  433. @Override
  434. public void onComplete(@NonNull Task<Void> task) {
  435. if (task.isSuccessful()
  436. && onProfileUpdateCompleteCallback != null) {
  437. KrollDict event = new KrollDict();
  438. event.put("success", true);
  439. event.put("types", "password");
  440.  
  441. onProfileUpdateCompleteCallback.callAsync(
  442. getKrollObject(), event);
  443. }
  444. }
  445. }).addOnFailureListener(new OnFailureListener() {
  446. @Override
  447. public void onFailure(@NonNull Exception e) {
  448. if (onProfileUpdateCompleteCallback != null) {
  449. KrollDict event = new KrollDict();
  450. event.put("success", false);
  451. onProfileUpdateCompleteCallback.callAsync(
  452. getKrollObject(), event);
  453. }
  454. }
  455. });
  456. }
  457. }
  458.  
  459. @Kroll.method
  460. public void sendEmailVerification(KrollDict opts) {
  461. if (opts.containsKeyAndNotNull("oncomplete")) {
  462. onProfileUpdateCompleteCallback = (KrollFunction) opts
  463. .get("onComplete");
  464. }
  465. FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
  466. if (user == null)
  467. return;
  468. user.sendEmailVerification().addOnCompleteListener(
  469. new OnCompleteListener<Void>() {
  470. @Override
  471. public void onComplete(@NonNull Task<Void> task) {
  472. if (task.isSuccessful()) {
  473. if (onProfileUpdateCompleteCallback != null) {
  474. KrollDict event = new KrollDict();
  475. event.put("success", true);
  476. event.put("types", "emailverification");
  477. onProfileUpdateCompleteCallback.callAsync(
  478. getKrollObject(), event);
  479. }
  480. }
  481. }
  482. });
  483. }
  484.  
  485. @Kroll.method
  486. public void testPhoneVerify(String phoneNumber, String smsCode) {
  487. PhoneAuthProvider.getInstance().verifyPhoneNumber(phoneNumber,
  488. 30L /* timeout */, TimeUnit.SECONDS,
  489. TiApplication.getAppCurrentActivity(),
  490. new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
  491.  
  492. @Override
  493. public void onCodeSent(
  494. String verificationId,
  495. PhoneAuthProvider.ForceResendingToken forceResendingToken) {
  496. // Save the verification id somewhere
  497. // The corresponding whitelisted code above should be
  498. // used to complete sign-in.
  499. Log.i(LCAT, "");
  500. }
  501.  
  502. @Override
  503. public void onVerificationCompleted(
  504. PhoneAuthCredential phoneAuthCredential) {
  505. Log.i(LCAT, "");
  506. // Sign in with the credential
  507. // ...
  508. }
  509.  
  510. @Override
  511. public void onVerificationFailed(FirebaseException e) {
  512. Log.i(LCAT, "");
  513. // ...
  514. }
  515.  
  516. });
  517. }
  518.  
  519. @Kroll.method
  520. public void testPhoneAutoRetrieve(String phoneNumber, String smsCode) {
  521.  
  522. FirebaseAuth firebaseAuth = FirebaseAuth.getInstance();
  523. // FirebaseAuthSettings firebaseAuthSettings =
  524. // firebaseAuth.getFirebaseAuthSettings();
  525.  
  526. // Configure faking the auto-retrieval with the whitelisted numbers.
  527. // firebaseAuthSettings.setAutoRetrievedSmsCodeForPhoneNumber(phoneNumber,
  528. // smsCode);
  529.  
  530. PhoneAuthProvider phoneAuthProvider = PhoneAuthProvider.getInstance();
  531. phoneAuthProvider.verifyPhoneNumber(phoneNumber, 60L, TimeUnit.SECONDS,
  532. TiApplication.getAppCurrentActivity(), /* activity */
  533. new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
  534. @Override
  535. public void onVerificationCompleted(
  536. PhoneAuthCredential credential) {
  537. // Instant verification is applied and a credential is
  538. // directly returned.
  539. // ...
  540. }
  541.  
  542. // [START_EXCLUDE]
  543. @Override
  544. public void onVerificationFailed(FirebaseException e) {
  545.  
  546. }
  547. // [END_EXCLUDE]
  548. });
  549. // [END auth_test_phone_auto]
  550. }
  551.  
  552. @Kroll.method
  553. public void setPasswordReset(KrollDict opts) {
  554. String email = "";
  555.  
  556. if (opts.containsKeyAndNotNull("oncomplete")) {
  557. onProfileUpdateCompleteCallback = (KrollFunction) opts
  558. .get("onComplete");
  559. }
  560. if (opts.containsKeyAndNotNull("email")) {
  561. email = opts.getString("email");
  562. }
  563. firebaseAuth.sendPasswordResetEmail(email).addOnCompleteListener(
  564. new OnCompleteListener<Void>() {
  565. @Override
  566. public void onComplete(@NonNull Task<Void> task) {
  567. if (task.isSuccessful()) {
  568. if (onProfileUpdateCompleteCallback != null) {
  569. KrollDict event = new KrollDict();
  570. event.put("success", true);
  571. event.put("types", "emailreset");
  572. onProfileUpdateCompleteCallback.callAsync(
  573. getKrollObject(), event);
  574. }
  575. }
  576. }
  577. });
  578. }
  579.  
  580. @Kroll.method
  581. public void deleteUser(KrollDict opts) {
  582.  
  583. if (opts.containsKeyAndNotNull("oncomplete")) {
  584. onProfileUpdateCompleteCallback = (KrollFunction) opts
  585. .get("onComplete");
  586. }
  587.  
  588. FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
  589. if (user == null)
  590. return;
  591. user.delete().addOnCompleteListener(new OnCompleteListener<Void>() {
  592. @Override
  593. public void onComplete(@NonNull Task<Void> task) {
  594. if (task.isSuccessful()) {
  595. if (onProfileUpdateCompleteCallback != null) {
  596. KrollDict event = new KrollDict();
  597. event.put("success", true);
  598. event.put("types", "userdelete");
  599. onProfileUpdateCompleteCallback.callAsync(
  600. getKrollObject(), event);
  601. }
  602. }
  603. }
  604. });
  605. }
  606.  
  607. @Kroll.method
  608. public void authWithGithub(KrollDict opts) {
  609. String accesstoken = null;
  610. if (opts.containsKeyAndNotNull("accesstoken")) {
  611. accesstoken = opts.getString("accesstoken");
  612. }
  613. if (opts.containsKeyAndNotNull("oncomplete")) {
  614. onProfileUpdateCompleteCallback = (KrollFunction) opts
  615. .get("onComplete");
  616. }
  617.  
  618. AuthCredential credential = GithubAuthProvider
  619. .getCredential(accesstoken);
  620. FirebaseAuth firebaseAuth = FirebaseAuth.getInstance();
  621. firebaseAuth.signInWithCredential(credential).addOnCompleteListener(
  622. TiApplication.getAppCurrentActivity(),
  623. new OnCompleteListener<AuthResult>() {
  624. @Override
  625. public void onComplete(@NonNull Task<AuthResult> task) {
  626. if (!task.isSuccessful()) {
  627. if (onProfileUpdateCompleteCallback != null) {
  628. KrollDict event = new KrollDict();
  629. event.put("success", true);
  630. event.put("types", "authwithgithub");
  631. onProfileUpdateCompleteCallback.callAsync(
  632. getKrollObject(), event);
  633. }
  634. }
  635.  
  636. // ...
  637. }
  638. });
  639.  
  640. }
  641.  
  642. private void signInWithPhoneAuthCredential(PhoneAuthCredential credential) {
  643. firebaseAuth.signInWithCredential(credential).addOnCompleteListener(
  644. TiApplication.getInstance().getCurrentActivity(),
  645. new OnCompleteListener<AuthResult>() {
  646. @Override
  647. public void onComplete(@NonNull Task<AuthResult> task) {
  648. KrollDict event = new KrollDict();
  649. if (task.isSuccessful()) {
  650. if (onVerificationCompletedCallback != null) {
  651. event.put("user",
  652. dictionaryFromUser(firebaseAuth
  653. .getCurrentUser()));
  654. onVerificationCompletedCallback.callAsync(
  655. getKrollObject(), event);
  656. }
  657. } else {
  658. if (task.getException() instanceof FirebaseAuthInvalidCredentialsException) {
  659. if (onErrorCallback != null) {
  660. event.put("message", task.getException()
  661. .getMessage());
  662. onErrorCallback.callAsync(getKrollObject(),
  663. event);
  664. }
  665. }
  666. }
  667.  
  668. }
  669. });
  670. }
  671.  
  672. public void signOut() {
  673. firebaseAuth.signOut();
  674. }
  675.  
  676. @Kroll.method
  677. public void fetchIDToken(boolean forceRefresh, final KrollFunction callback) {
  678. firebaseAuth.getCurrentUser().getIdToken(forceRefresh)
  679. .addOnSuccessListener(new OnSuccessListener<GetTokenResult>() {
  680. @Override
  681. public void onSuccess(GetTokenResult result) {
  682. KrollDict event = new KrollDict();
  683. event.put("success", true);
  684. event.put("token", result.getToken());
  685. callback.callAsync(getKrollObject(), event);
  686. }
  687. }).addOnFailureListener(new OnFailureListener() {
  688. @Override
  689. public void onFailure(Exception exception) {
  690. KrollDict event = new KrollDict();
  691. event.put("success", false);
  692. event.put("code", 0);
  693. event.put("description", exception.getMessage());
  694. callback.callAsync(getKrollObject(), event);
  695. }
  696. });
  697. }
  698.  
  699. @Kroll.method
  700. public TitaniumFirebaseAuthCredentialProxy createAuthCredential(
  701. KrollDict params) {
  702. int type = (int) params.get("provider");
  703. String accessToken = (String) params.get("accessToken");
  704. String secretToken = (String) params.get("secretToken");
  705. String providerID = (String) params.get("providerID");
  706. String IDToken = (String) params.get("IDToken");
  707.  
  708. return new TitaniumFirebaseAuthCredentialProxy(type, accessToken,
  709. secretToken, providerID, IDToken);
  710. }
  711.  
  712. @Kroll.method
  713. public void setLanguage(String lang) {
  714.  
  715. }
  716.  
  717. @Kroll.getProperty
  718. public KrollDict getCurrentUser() {
  719. return dictionaryFromUser(firebaseAuth.getCurrentUser());
  720. }
  721.  
  722. @Kroll.method
  723. public void addAuthStateDidChangeListener(KrollFunction cb) {
  724. authStateDidChangeCallback = cb;
  725. }
  726.  
  727. @Kroll.getProperty
  728. public String getLanguageCode() {
  729. // return firebaseAuth.getLanguageCode();
  730. // throws "cannot find symbol"
  731. return null;
  732. }
  733.  
  734. private KrollDict dictionaryFromUser(FirebaseUser user) {
  735. if (user == null) {
  736. return null;
  737. }
  738. KrollDict result = new KrollDict();
  739. result.put("email", user.getEmail());
  740. result.put("phoneNumber", user.getPhoneNumber());
  741. result.put("providerID", user.getProviderId());
  742. result.put("uid", user.getUid());
  743. result.put("photoURL", user.getPhotoUrl().toString());
  744. result.put("displayName", user.getDisplayName());
  745. result.put("emailVerified", user.isEmailVerified());
  746. return result;
  747. }
  748.  
  749. }
Add Comment
Please, Sign In to add comment