aboutsummaryrefslogtreecommitdiffhomepage
path: root/Firebase/Auth/Source/RPCs/FIRVerifyPhoneNumberRequest.m
blob: 022ab9e664d03a0792c1dad019e87e11fc33bd08 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
/*
 * Copyright 2017 Google
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#import "FIRVerifyPhoneNumberRequest.h"

NS_ASSUME_NONNULL_BEGIN

/** @var kVerifyPhoneNumberEndPoint
    @brief The "verifyPhoneNumber" endpoint.
 */
static NSString *const kVerifyPhoneNumberEndPoint = @"verifyPhoneNumber";

/** @var kVerificationIDKey
    @brief The key for the verification ID parameter in the request.
 */
static NSString *const kVerificationIDKey = @"sessionInfo";

/** @var kVerificationCodeKey
    @brief The key for the verification code parameter in the request.
 */
static NSString *const kVerificationCodeKey = @"code";

/** @var kIDTokenKey
    @brief The key for the "ID Token" value in the request.
 */
static NSString *const kIDTokenKey = @"idToken";

/** @var kTemporaryProofKey
    @brief The key for the temporary proof value in the request.
 */
static NSString *const kTemporaryProofKey = @"temporaryProof";

/** @var kPhoneNumberKey
    @brief The key for the phone number value in the request.
 */
static NSString *const kPhoneNumberKey = @"phoneNumber";

/** @var kOperationKey
    @brief The key for the operation value in the request.
 */
static NSString *const kOperationKey = @"operation";

@implementation FIRVerifyPhoneNumberRequest

- (nullable instancetype)initWithTemporaryProof:(NSString *)temporaryProof
                                    phoneNumber:(NSString *)phoneNumber
                                      operation:(FIRAuthOperationType)operation
                           requestConfiguration:
                              (FIRAuthRequestConfiguration *)requestConfiguration {
  self = [super initWithEndpoint:kVerifyPhoneNumberEndPoint
            requestConfiguration:requestConfiguration];
  if (self) {
    _temporaryProof = [temporaryProof copy];
    _phoneNumber = [phoneNumber copy];
    _operation = operation;
  }
  return self;
}

- (nullable instancetype)initWithVerificationID:(NSString *)verificationID
                               verificationCode:(NSString *)verificationCode
                                      operation:(FIRAuthOperationType)operation
                           requestConfiguration:
                              (FIRAuthRequestConfiguration *)requestConfiguration {
  self = [super initWithEndpoint:kVerifyPhoneNumberEndPoint
            requestConfiguration:requestConfiguration];
  if (self) {
    _verificationID = verificationID;
    _verificationCode = verificationCode;
    _operation = operation;
  }
  return self;
}

/** @fn FIRAuthOperationString
    @brief Returns a string object corresponding to the provided FIRAuthOperationType value.
    @param operationType The value of the FIRAuthOperationType enum which will be translated to its
        corresponding string value.
    @return The string value corresponding to the FIRAuthOperationType argument.
 */
NSString *const FIRAuthOperationString(FIRAuthOperationType operationType) {
  switch(operationType){
    case FIRAuthOperationTypeUnspecified:
      return @"VERIFY_OP_UNSPECIFIED";
    case FIRAuthOperationTypeSignUpOrSignIn:
      return @"SIGN_UP_OR_IN";
    case FIRAuthOperationTypeReauth:
      return @"REAUTH";
    case FIRAuthOperationTypeLink:
      return @"LINK";
    case FIRAuthOperationTypeUpdate:
      return @"UPDATE";
  }
}

- (nullable id)unencodedHTTPRequestBodyWithError:(NSError *__autoreleasing  _Nullable *)error {
  NSMutableDictionary *postBody = [NSMutableDictionary dictionary];
  if (_verificationID) {
    postBody[kVerificationIDKey] = _verificationID;
  }
  if (_verificationCode) {
    postBody[kVerificationCodeKey] = _verificationCode;
  }
  if (_accessToken) {
    postBody[kIDTokenKey] = _accessToken;
  }
  if (_temporaryProof) {
    postBody[kTemporaryProofKey] = _temporaryProof;
  }
  if (_phoneNumber) {
    postBody[kPhoneNumberKey] = _phoneNumber;
  }
  NSString *operation = FIRAuthOperationString(_operation);
  postBody[kOperationKey] = operation;
  return postBody;
}

@end

NS_ASSUME_NONNULL_END