// // Copyright (c) 2019 Open Whisper Systems. All rights reserved. // #import NS_ASSUME_NONNULL_BEGIN extern NSString *const TSRegistrationErrorDomain; extern NSString *const TSRegistrationErrorUserInfoHTTPStatus; extern NSString *const RegistrationStateDidChangeNotification; extern NSString *const kNSNotificationName_LocalNumberDidChange; @class AnyPromise; @class OWSPrimaryStorage; @class TSNetworkManager; @class YapDatabaseReadTransaction; @class YapDatabaseReadWriteTransaction; typedef NS_ENUM(NSUInteger, OWSRegistrationState) { OWSRegistrationState_Unregistered, OWSRegistrationState_PendingBackupRestore, OWSRegistrationState_Registered, OWSRegistrationState_Deregistered, OWSRegistrationState_Reregistering, }; @interface TSAccountManager : NSObject @property (nonatomic, nullable) NSString *phoneNumberAwaitingVerification; #pragma mark - Initializers - (instancetype)init NS_UNAVAILABLE; - (instancetype)initWithPrimaryStorage:(OWSPrimaryStorage *)primaryStorage NS_DESIGNATED_INITIALIZER; + (instancetype)sharedInstance; - (OWSRegistrationState)registrationState; /** * Returns if a user is registered or not * * @return registered or not */ - (BOOL)isRegistered; - (BOOL)isRegisteredAndReady; /** * Returns current phone number for this device, which may not yet have been registered. * * @return E164 formatted phone number */ + (nullable NSString *)localNumber; - (nullable NSString *)localNumber; // A variant of localNumber that never opens a "sneaky" transaction. - (nullable NSString *)storedOrCachedLocalNumber:(YapDatabaseReadTransaction *)transaction; /** * Symmetric key that's used to encrypt message payloads from the server, * * @return signaling key */ + (nullable NSString *)signalingKey; - (nullable NSString *)signalingKey; /** * The server auth token allows the Signal client to connect to the Signal server * * @return server authentication token */ + (nullable NSString *)serverAuthToken; - (nullable NSString *)serverAuthToken; /** * The registration ID is unique to an installation of TextSecure, it allows to know if the app was reinstalled * * @return registrationID; */ + (uint32_t)getOrGenerateRegistrationId:(YapDatabaseReadWriteTransaction *)transaction; - (uint32_t)getOrGenerateRegistrationId; - (uint32_t)getOrGenerateRegistrationId:(YapDatabaseReadWriteTransaction *)transaction; #pragma mark - Register with phone number - (void)registerWithPhoneNumber:(NSString *)phoneNumber captchaToken:(nullable NSString *)captchaToken success:(void (^)(void))successBlock failure:(void (^)(NSError *error))failureBlock smsVerification:(BOOL)isSMS; - (void)rerequestSMSWithCaptchaToken:(nullable NSString *)captchaToken success:(void (^)(void))successBlock failure:(void (^)(NSError *error))failureBlock; - (void)rerequestVoiceWithCaptchaToken:(nullable NSString *)captchaToken success:(void (^)(void))successBlock failure:(void (^)(NSError *error))failureBlock; - (void)verifyAccountWithCode:(NSString *)verificationCode pin:(nullable NSString *)pin success:(void (^)(void))successBlock failure:(void (^)(NSError *error))failureBlock; // Called once registration is complete - meaning the following have succeeded: // - obtained signal server credentials // - uploaded pre-keys // - uploaded push tokens - (void)didRegister; #if TARGET_OS_IPHONE /** * Register's the device's push notification token with the server * * @param pushToken Apple's Push Token */ - (void)registerForPushNotificationsWithPushToken:(NSString *)pushToken voipToken:(NSString *)voipToken isForcedUpdate:(BOOL)isForcedUpdate success:(void (^)(void))successHandler failure:(void (^)(NSError *error))failureHandler NS_SWIFT_NAME(registerForPushNotifications(pushToken:voipToken:isForcedUpdate:success:failure:)); #endif + (void)unregisterTextSecureWithSuccess:(void (^)(void))success failure:(void (^)(NSError *error))failureBlock; #pragma mark - De-Registration // De-registration reflects whether or not the "last known contact" // with the service was: // // * A 403 from the service, indicating de-registration. // * A successful auth'd request _or_ websocket connection indicating // valid registration. - (BOOL)isDeregistered; - (void)setIsDeregistered:(BOOL)isDeregistered; - (BOOL)hasPendingBackupRestoreDecision; - (void)setHasPendingBackupRestoreDecision:(BOOL)value; #pragma mark - Re-registration // Re-registration is the process of re-registering _with the same phone number_. // Returns YES on success. - (nullable NSString *)reregisterationPhoneNumber; - (BOOL)isReregistering; #pragma mark - Manual Message Fetch - (BOOL)isManualMessageFetchEnabled; - (AnyPromise *)setIsManualMessageFetchEnabled:(BOOL)value __attribute__((warn_unused_result)); #ifdef DEBUG - (void)registerForTestsWithLocalNumber:(NSString *)localNumber; #endif - (AnyPromise *)updateAccountAttributes __attribute__((warn_unused_result)); // This should only be used during the registration process. - (AnyPromise *)performUpdateAccountAttributes __attribute__((warn_unused_result)); @end NS_ASSUME_NONNULL_END