Skip to content

Commit 1dbdab6

Browse files
Merge pull request #965 from matrix-org/element_3846
Support multiple SSO Identity Providers (MSC2858)
2 parents a9a3fa3 + d4421d6 commit 1dbdab6

File tree

9 files changed

+403
-5
lines changed

9 files changed

+403
-5
lines changed

CHANGES.rst

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,13 @@ Changes to be released in next version
66

77
🙌 Improvements
88
* MXTaggedEvents: Expose "m.tagged_events" according to [MSC2437](https://github.com/matrix-org/matrix-doc/pull/2437).
9+
* Login flow: Add MXLoginSSOFlow to support multiple SSO Identity Providers ([MSC2858](https://github.com/matrix-org/matrix-doc/pull/2858)) (vector-im/element-ios/issues/3846).
910

1011
🐛 Bugfix
1112
*
1213

1314
⚠️ API Changes
14-
*
15+
*
1516

1617
🗣 Translations
1718
*

MatrixSDK.xcodeproj/project.pbxproj

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -634,6 +634,16 @@
634634
B14766B823D9D9410091F721 /* MXUsersTrustLevelSummary.h in Headers */ = {isa = PBXBuildFile; fileRef = B14766B523D9D9410091F721 /* MXUsersTrustLevelSummary.h */; settings = {ATTRIBUTES = (Public, ); }; };
635635
B14766B923D9D9420091F721 /* MXUsersTrustLevelSummary.m in Sources */ = {isa = PBXBuildFile; fileRef = B14766B623D9D9410091F721 /* MXUsersTrustLevelSummary.m */; };
636636
B14766BA23D9D9420091F721 /* MXUsersTrustLevelSummary.m in Sources */ = {isa = PBXBuildFile; fileRef = B14766B623D9D9410091F721 /* MXUsersTrustLevelSummary.m */; };
637+
B14EECD72577DE7A00448735 /* MXLoginSSOIdentityProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = B14EECD52577DE7A00448735 /* MXLoginSSOIdentityProvider.h */; settings = {ATTRIBUTES = (Public, ); }; };
638+
B14EECD82577DE7A00448735 /* MXLoginSSOIdentityProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = B14EECD52577DE7A00448735 /* MXLoginSSOIdentityProvider.h */; settings = {ATTRIBUTES = (Public, ); }; };
639+
B14EECD92577DE7A00448735 /* MXLoginSSOIdentityProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = B14EECD62577DE7A00448735 /* MXLoginSSOIdentityProvider.m */; };
640+
B14EECDA2577DE7B00448735 /* MXLoginSSOIdentityProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = B14EECD62577DE7A00448735 /* MXLoginSSOIdentityProvider.m */; };
641+
B14EECE52577F76100448735 /* MXLoginSSOFlow.h in Headers */ = {isa = PBXBuildFile; fileRef = B14EECE32577F76100448735 /* MXLoginSSOFlow.h */; settings = {ATTRIBUTES = (Public, ); }; };
642+
B14EECE62577F76100448735 /* MXLoginSSOFlow.h in Headers */ = {isa = PBXBuildFile; fileRef = B14EECE32577F76100448735 /* MXLoginSSOFlow.h */; settings = {ATTRIBUTES = (Public, ); }; };
643+
B14EECE72577F76100448735 /* MXLoginSSOFlow.m in Sources */ = {isa = PBXBuildFile; fileRef = B14EECE42577F76100448735 /* MXLoginSSOFlow.m */; };
644+
B14EECE82577F76100448735 /* MXLoginSSOFlow.m in Sources */ = {isa = PBXBuildFile; fileRef = B14EECE42577F76100448735 /* MXLoginSSOFlow.m */; };
645+
B14EECEE2578FE3F00448735 /* MXAuthenticationSessionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B14EECED2578FE3F00448735 /* MXAuthenticationSessionTests.swift */; };
646+
B14EECEF2578FE3F00448735 /* MXAuthenticationSessionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B14EECED2578FE3F00448735 /* MXAuthenticationSessionTests.swift */; };
637647
B14EF1CA2397E90400758AF0 /* MXOlmInboundGroupSession.m in Sources */ = {isa = PBXBuildFile; fileRef = 32A1513D1DAF768D00400192 /* MXOlmInboundGroupSession.m */; };
638648
B14EF1CB2397E90400758AF0 /* MXRoomAccountData.m in Sources */ = {isa = PBXBuildFile; fileRef = 32481A831C03572900782AD3 /* MXRoomAccountData.m */; };
639649
B14EF1CC2397E90400758AF0 /* MXEventAnnotationChunk.m in Sources */ = {isa = PBXBuildFile; fileRef = 327E9AD52284803100A98BC1 /* MXEventAnnotationChunk.m */; };
@@ -1775,6 +1785,11 @@
17751785
B14766B523D9D9410091F721 /* MXUsersTrustLevelSummary.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MXUsersTrustLevelSummary.h; sourceTree = "<group>"; };
17761786
B14766B623D9D9410091F721 /* MXUsersTrustLevelSummary.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MXUsersTrustLevelSummary.m; sourceTree = "<group>"; };
17771787
B14B17682464419E00C2751E /* MatrixSDK.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; path = MatrixSDK.podspec; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
1788+
B14EECD52577DE7A00448735 /* MXLoginSSOIdentityProvider.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MXLoginSSOIdentityProvider.h; sourceTree = "<group>"; };
1789+
B14EECD62577DE7A00448735 /* MXLoginSSOIdentityProvider.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MXLoginSSOIdentityProvider.m; sourceTree = "<group>"; };
1790+
B14EECE32577F76100448735 /* MXLoginSSOFlow.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MXLoginSSOFlow.h; sourceTree = "<group>"; };
1791+
B14EECE42577F76100448735 /* MXLoginSSOFlow.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MXLoginSSOFlow.m; sourceTree = "<group>"; };
1792+
B14EECED2578FE3F00448735 /* MXAuthenticationSessionTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MXAuthenticationSessionTests.swift; sourceTree = "<group>"; };
17781793
B14EF36B2397E90400758AF0 /* MatrixSDK.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = MatrixSDK.framework; sourceTree = BUILT_PRODUCTS_DIR; };
17791794
B17285782100C88A0052C51E /* MXSendReplyEventStringsLocalizable.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MXSendReplyEventStringsLocalizable.h; path = ../MXSendReplyEventStringsLocalizable.h; sourceTree = "<group>"; };
17801795
B172857A2100D4F60052C51E /* MXSendReplyEventDefaultStringLocalizations.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MXSendReplyEventDefaultStringLocalizations.h; path = ../MXSendReplyEventDefaultStringLocalizations.h; sourceTree = "<group>"; };
@@ -2552,6 +2567,7 @@
25522567
327E9AB9228451E500A98BC1 /* Event */,
25532568
32999DDC22DCD139004FF987 /* Push */,
25542569
B182B08423167A1C0057972E /* IdentityServer */,
2570+
B14EECD42577DE4400448735 /* Login */,
25552571
3281E8B319E42DFE00976E1A /* MXJSONModel.h */,
25562572
3281E8B419E42DFE00976E1A /* MXJSONModel.m */,
25572573
3281E8B519E42DFE00976E1A /* MXJSONModels.h */,
@@ -2894,6 +2910,7 @@
28942910
32CEEF3C23AD134A0039BA98 /* MXCrossSigningTests.m */,
28952911
ECAE7AEB24ED75F1002FA813 /* HTTPAdditionalHeadersTests.m */,
28962912
3AE97790256FC190003883EF /* MXAesTests.m */,
2913+
B14EECED2578FE3F00448735 /* MXAuthenticationSessionTests.swift */,
28972914
);
28982915
path = MatrixSDKTests;
28992916
sourceTree = "<group>";
@@ -3192,6 +3209,17 @@
31923209
path = Event;
31933210
sourceTree = "<group>";
31943211
};
3212+
B14EECD42577DE4400448735 /* Login */ = {
3213+
isa = PBXGroup;
3214+
children = (
3215+
B14EECD52577DE7A00448735 /* MXLoginSSOIdentityProvider.h */,
3216+
B14EECD62577DE7A00448735 /* MXLoginSSOIdentityProvider.m */,
3217+
B14EECE32577F76100448735 /* MXLoginSSOFlow.h */,
3218+
B14EECE42577F76100448735 /* MXLoginSSOFlow.m */,
3219+
);
3220+
path = Login;
3221+
sourceTree = "<group>";
3222+
};
31953223
B182B08423167A1C0057972E /* IdentityServer */ = {
31963224
isa = PBXGroup;
31973225
children = (
@@ -3311,6 +3339,7 @@
33113339
B146D4EF21A5AF7F00D8C2C6 /* MXRealmEventScan.h in Headers */,
33123340
B146D49C21A5A04300D8C2C6 /* MXMediaScanStoreDelegate.h in Headers */,
33133341
32322A4B1E575F65005DD155 /* MXAllowedCertificates.h in Headers */,
3342+
B14EECD72577DE7A00448735 /* MXLoginSSOIdentityProvider.h in Headers */,
33143343
3213301D228B190F0070BA9B /* MXRealmAggregationsMapper.h in Headers */,
33153344
32A1515B1DB525DA00400192 /* NSObject+sortedKeys.h in Headers */,
33163345
329D3E621E251027002E2F1E /* MXRoomSummaryUpdater.h in Headers */,
@@ -3330,6 +3359,7 @@
33303359
323547D52226D3F500F15F94 /* MXWellKnown.h in Headers */,
33313360
32FFB4F0217E146A00C96002 /* MXRecoveryKey.h in Headers */,
33323361
32AF928A240EA3880008A0FD /* MXSecretShareSend.h in Headers */,
3362+
B14EECE52577F76100448735 /* MXLoginSSOFlow.h in Headers */,
33333363
B1798D0624091A0100308A8F /* MXBase64Tools.h in Headers */,
33343364
32133015228AF4EF0070BA9B /* MXRealmAggregationsStore.h in Headers */,
33353365
32CE6FB81A409B1F00317F1E /* MXFileStoreMetaData.h in Headers */,
@@ -3598,6 +3628,7 @@
35983628
B14EF2A32397E90400758AF0 /* MXRoomSummary.h in Headers */,
35993629
B14EF2A42397E90400758AF0 /* MXRoomCreateContent.h in Headers */,
36003630
B14EF2A52397E90400758AF0 /* MXAggregatedEditsUpdater.h in Headers */,
3631+
B14EECE62577F76100448735 /* MXLoginSSOFlow.h in Headers */,
36013632
327C3E4C23A39D91006183D1 /* MXAggregatedReferencesUpdater.h in Headers */,
36023633
B14EF2A62397E90400758AF0 /* MXAggregations.h in Headers */,
36033634
8EC511052568216B00EC4E5B /* MXTaggedEventInfo.h in Headers */,
@@ -3705,6 +3736,7 @@
37053736
B14EF2F32397E90400758AF0 /* MXRealmMediaScanMapper.h in Headers */,
37063737
B14EF2F42397E90400758AF0 /* NSData+MatrixSDK.h in Headers */,
37073738
B14EF2F52397E90400758AF0 /* MXSDKOptions.h in Headers */,
3739+
B14EECD82577DE7A00448735 /* MXLoginSSOIdentityProvider.h in Headers */,
37083740
B14EF2F62397E90400758AF0 /* MXJSONModels.h in Headers */,
37093741
B14EF2F72397E90400758AF0 /* MXRoomEventFilter.h in Headers */,
37103742
B14EF2F82397E90400758AF0 /* MXUIKitBackgroundModeHandler.h in Headers */,
@@ -4111,6 +4143,7 @@
41114143
buildActionMask = 2147483647;
41124144
files = (
41134145
32A1513F1DAF768D00400192 /* MXOlmInboundGroupSession.m in Sources */,
4146+
B14EECE72577F76100448735 /* MXLoginSSOFlow.m in Sources */,
41144147
32481A851C03572900782AD3 /* MXRoomAccountData.m in Sources */,
41154148
327E9AD92284803100A98BC1 /* MXEventAnnotationChunk.m in Sources */,
41164149
327A5F56239805F600ED6329 /* MXKeyVerificationCancel.m in Sources */,
@@ -4327,6 +4360,7 @@
43274360
321CFDE722525A49004D31DF /* MXSASTransaction.m in Sources */,
43284361
32720D9D222EAA6F0086FFF5 /* MXDiscoveredClientConfig.m in Sources */,
43294362
B146D4F321A5AF7F00D8C2C6 /* MXRealmEventScan.m in Sources */,
4363+
B14EECD92577DE7A00448735 /* MXLoginSSOIdentityProvider.m in Sources */,
43304364
322691371E5EFF8700966A6E /* MXDeviceListOperationsPool.m in Sources */,
43314365
C6F935801E5B3ACA00FC34BF /* MXResponse.swift in Sources */,
43324366
32BA86B02152A79E008F277E /* MXRoomNameDefaultStringLocalizations.m in Sources */,
@@ -4382,6 +4416,7 @@
43824416
3AE97791256FC190003883EF /* MXAesTests.m in Sources */,
43834417
B146D4FE21A5C0BD00D8C2C6 /* MXEventScanStoreTests.m in Sources */,
43844418
32684CB821085F770046D2F9 /* MXLazyLoadingTests.m in Sources */,
4419+
B14EECEE2578FE3F00448735 /* MXAuthenticationSessionTests.swift in Sources */,
43854420
32832B5D1BCC048300241108 /* MXStoreMemoryStoreTests.m in Sources */,
43864421
32114A7F1A24E15500FF2EC4 /* MXMyUserTests.m in Sources */,
43874422
32832B5E1BCC048300241108 /* MXStoreNoStoreTests.m in Sources */,
@@ -4511,6 +4546,7 @@
45114546
B14EF2022397E90400758AF0 /* MXEventUnsignedData.m in Sources */,
45124547
324AAC792399140D00380A66 /* MXKeyVerificationKey.m in Sources */,
45134548
B14EF2032397E90400758AF0 /* MXMegolmEncryption.m in Sources */,
4549+
B14EECDA2577DE7B00448735 /* MXLoginSSOIdentityProvider.m in Sources */,
45144550
B14EF2042397E90400758AF0 /* MXIncomingRoomKeyRequest.m in Sources */,
45154551
32581DEB23C8C0C900832EAA /* MXUserTrustLevel.m in Sources */,
45164552
B14EF2052397E90400758AF0 /* MX3PidAddManager.swift in Sources */,
@@ -4590,6 +4626,7 @@
45904626
B14EF2432397E90400758AF0 /* MXIncomingSASTransaction.m in Sources */,
45914627
B14EF2442397E90400758AF0 /* NSObject+sortedKeys.m in Sources */,
45924628
B14EF2452397E90400758AF0 /* MXAggregatedReactionsUpdater.m in Sources */,
4629+
B14EECE82577F76100448735 /* MXLoginSSOFlow.m in Sources */,
45934630
B14EF2462397E90400758AF0 /* MXRoomMembers.m in Sources */,
45944631
32AF927E240EA0190008A0FD /* MXSecretShareManager.m in Sources */,
45954632
B14EF2472397E90400758AF0 /* MXContentScanEncryptedBody.m in Sources */,
@@ -4742,6 +4779,7 @@
47424779
B1E09A3A2397FD820057C069 /* MXStoreTests.m in Sources */,
47434780
B1E09A342397FD750057C069 /* MXRoomStateDynamicTests.m in Sources */,
47444781
B1E09A272397FD010057C069 /* MXMockCallStack.m in Sources */,
4782+
B14EECEF2578FE3F00448735 /* MXAuthenticationSessionTests.swift in Sources */,
47454783
B1E09A432397FD820057C069 /* MXMegolmExportEncryptionTest.m in Sources */,
47464784
32B0E3E823A3864C0054FF1A /* MXEventReferenceTests.swift in Sources */,
47474785
B1E09A402397FD820057C069 /* MXVoIPTests.m in Sources */,
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
//
2+
// Copyright 2020 The Matrix.org Foundation C.I.C
3+
//
4+
// Licensed under the Apache License, Version 2.0 (the "License");
5+
// you may not use this file except in compliance with the License.
6+
// You may obtain a copy of the License at
7+
//
8+
// http://www.apache.org/licenses/LICENSE-2.0
9+
//
10+
// Unless required by applicable law or agreed to in writing, software
11+
// distributed under the License is distributed on an "AS IS" BASIS,
12+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
// See the License for the specific language governing permissions and
14+
// limitations under the License.
15+
//
16+
17+
#import <Foundation/Foundation.h>
18+
#import "MXJSONModels.h"
19+
#import "MXLoginSSOIdentityProvider.h"
20+
21+
NS_ASSUME_NONNULL_BEGIN
22+
23+
extern NSString *const MXLoginSSOFlowIdentityProvidersKey;
24+
25+
/**
26+
`MXLoginSSOFlow` represents a SSO login or a register flow supported by the home server (See MSC2858 https://github.com/matrix-org/matrix-doc/pull/2858).
27+
*/
28+
@interface MXLoginSSOFlow : MXLoginFlow
29+
30+
/**
31+
List of all SSO Identity Providers supported
32+
*/
33+
@property (nonatomic, readonly) NSArray<MXLoginSSOIdentityProvider*> *identityProviders;
34+
35+
@end
36+
37+
NS_ASSUME_NONNULL_END
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
//
2+
// Copyright 2020 The Matrix.org Foundation C.I.C
3+
//
4+
// Licensed under the Apache License, Version 2.0 (the "License");
5+
// you may not use this file except in compliance with the License.
6+
// You may obtain a copy of the License at
7+
//
8+
// http://www.apache.org/licenses/LICENSE-2.0
9+
//
10+
// Unless required by applicable law or agreed to in writing, software
11+
// distributed under the License is distributed on an "AS IS" BASIS,
12+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
// See the License for the specific language governing permissions and
14+
// limitations under the License.
15+
//
16+
17+
#import "MXLoginSSOFlow.h"
18+
19+
NSString *const MXLoginSSOFlowIdentityProvidersKey = @"identity_providers";
20+
21+
@interface MXLoginSSOFlow()
22+
23+
@property (nonatomic, readwrite) NSArray<MXLoginSSOIdentityProvider*> *identityProviders;
24+
25+
@end
26+
27+
@implementation MXLoginSSOFlow
28+
29+
+ (instancetype)modelFromJSON:(NSDictionary *)JSONDictionary
30+
{
31+
MXLoginSSOFlow *loginFlow = [super modelFromJSON:JSONDictionary];
32+
33+
if (loginFlow)
34+
{
35+
NSArray *jsonIdentityProdivers;
36+
37+
MXJSONModelSetArray(jsonIdentityProdivers, JSONDictionary[MXLoginSSOFlowIdentityProvidersKey]);
38+
39+
NSArray<MXLoginSSOIdentityProvider*> *identityProviders;
40+
41+
if (jsonIdentityProdivers)
42+
{
43+
identityProviders = [MXLoginSSOIdentityProvider modelsFromJSON:jsonIdentityProdivers];
44+
}
45+
46+
if (!identityProviders)
47+
{
48+
identityProviders = [NSArray new];
49+
}
50+
51+
loginFlow.identityProviders = identityProviders;
52+
53+
}
54+
55+
return loginFlow;
56+
}
57+
58+
@end
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
//
2+
// Copyright 2020 The Matrix.org Foundation C.I.C
3+
//
4+
// Licensed under the Apache License, Version 2.0 (the "License");
5+
// you may not use this file except in compliance with the License.
6+
// You may obtain a copy of the License at
7+
//
8+
// http://www.apache.org/licenses/LICENSE-2.0
9+
//
10+
// Unless required by applicable law or agreed to in writing, software
11+
// distributed under the License is distributed on an "AS IS" BASIS,
12+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
// See the License for the specific language governing permissions and
14+
// limitations under the License.
15+
//
16+
17+
#import <Foundation/Foundation.h>
18+
#import "MXJSONModel.h"
19+
20+
NS_ASSUME_NONNULL_BEGIN
21+
22+
/**
23+
`MXLoginSSOIdentityProvider` represents a SSO Identity Provider as described in MSC2858 (See https://github.com/matrix-org/matrix-doc/pull/2858)
24+
*/
25+
@interface MXLoginSSOIdentityProvider : MXJSONModel
26+
27+
/**
28+
The identifier field (id field in JSON) is the Identity Provider identifier used for the SSO Web page redirection `/login/sso/redirect/{idp_id}`.
29+
*/
30+
@property (nonatomic, readonly) NSString *identifier;
31+
32+
/**
33+
The name field is a human readable string intended to be printed by the client.
34+
*/
35+
@property (nonatomic, readonly) NSString *name;
36+
37+
/**
38+
The icon field is an optional field that points to an icon representing the identity provider. If present then it must be an HTTPS URL to an image resource.
39+
*/
40+
@property (nonatomic, readonly, nullable) NSString *icon;
41+
42+
@end
43+
44+
NS_ASSUME_NONNULL_END
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
//
2+
// Copyright 2020 The Matrix.org Foundation C.I.C
3+
//
4+
// Licensed under the Apache License, Version 2.0 (the "License");
5+
// you may not use this file except in compliance with the License.
6+
// You may obtain a copy of the License at
7+
//
8+
// http://www.apache.org/licenses/LICENSE-2.0
9+
//
10+
// Unless required by applicable law or agreed to in writing, software
11+
// distributed under the License is distributed on an "AS IS" BASIS,
12+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
// See the License for the specific language governing permissions and
14+
// limitations under the License.
15+
//
16+
17+
#import "MXLoginSSOIdentityProvider.h"
18+
19+
@interface MXLoginSSOIdentityProvider()
20+
21+
@property (nonatomic, readwrite) NSString *identifier;
22+
@property (nonatomic, readwrite) NSString *name;
23+
@property (nonatomic, readwrite, nullable) NSString *icon;
24+
25+
@end
26+
27+
@implementation MXLoginSSOIdentityProvider
28+
29+
+ (instancetype)modelFromJSON:(NSDictionary *)JSONDictionary
30+
{
31+
NSString *identifier;
32+
NSString *name;
33+
34+
MXJSONModelSetString(identifier, JSONDictionary[@"id"]);
35+
MXJSONModelSetString(name, JSONDictionary[@"name"]);
36+
37+
MXLoginSSOIdentityProvider *identityProvider;
38+
39+
if (identifier && name)
40+
{
41+
identityProvider = [MXLoginSSOIdentityProvider new];
42+
43+
identityProvider.identifier = identifier;
44+
identityProvider.name = name;
45+
MXJSONModelSetString(identityProvider.icon, JSONDictionary[@"icon"]);
46+
}
47+
48+
return identityProvider;
49+
}
50+
51+
@end

0 commit comments

Comments
 (0)