Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Rename "BrowserID" --> "Persona"

Note that this invalidates all saved persistent replications that used Persona/BrowserID auth,
because the property in the replication doc was renamed too.
It also changes the server endpoint that the replicator hits to log in from /db/browserid to /db/persona.
Fixes #25.
  • Loading branch information...
commit 111859cb5efd8e330b9b1034678adeaa799c99ed 1 parent daab43d
Jens Alfke snej authored
24 CouchbaseLite.xcodeproj/project.pbxproj
View
@@ -157,10 +157,10 @@
2773ADC714BD1EB80027A292 /* CBLDatabase+LocalDocs.h in Headers */ = {isa = PBXBuildFile; fileRef = 2773ADC514BD1EB80027A292 /* CBLDatabase+LocalDocs.h */; settings = {ATTRIBUTES = (Private, ); }; };
2773ADC814BD1EB80027A292 /* CBLDatabase+LocalDocs.m in Sources */ = {isa = PBXBuildFile; fileRef = 2773ADC614BD1EB80027A292 /* CBLDatabase+LocalDocs.m */; };
2773ADC914BD1EB80027A292 /* CBLDatabase+LocalDocs.m in Sources */ = {isa = PBXBuildFile; fileRef = 2773ADC614BD1EB80027A292 /* CBLDatabase+LocalDocs.m */; };
- 2776A59116A0C3A6006FF199 /* CBLBrowserIDAuthorizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2776A58F16A0C3A6006FF199 /* CBLBrowserIDAuthorizer.h */; };
- 2776A59216A0C3A6006FF199 /* CBLBrowserIDAuthorizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2776A58F16A0C3A6006FF199 /* CBLBrowserIDAuthorizer.h */; };
- 2776A59316A0C3A6006FF199 /* CBLBrowserIDAuthorizer.m in Sources */ = {isa = PBXBuildFile; fileRef = 2776A59016A0C3A6006FF199 /* CBLBrowserIDAuthorizer.m */; };
- 2776A59616A0C3B1006FF199 /* CBLBrowserIDAuthorizer.m in Sources */ = {isa = PBXBuildFile; fileRef = 2776A59016A0C3A6006FF199 /* CBLBrowserIDAuthorizer.m */; };
+ 2776A59116A0C3A6006FF199 /* CBLPersonaAuthorizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2776A58F16A0C3A6006FF199 /* CBLPersonaAuthorizer.h */; };
+ 2776A59216A0C3A6006FF199 /* CBLPersonaAuthorizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2776A58F16A0C3A6006FF199 /* CBLPersonaAuthorizer.h */; };
+ 2776A59316A0C3A6006FF199 /* CBLPersonaAuthorizer.m in Sources */ = {isa = PBXBuildFile; fileRef = 2776A59016A0C3A6006FF199 /* CBLPersonaAuthorizer.m */; };
+ 2776A59616A0C3B1006FF199 /* CBLPersonaAuthorizer.m in Sources */ = {isa = PBXBuildFile; fileRef = 2776A59016A0C3A6006FF199 /* CBLPersonaAuthorizer.m */; };
2776A63016A9BCBC006FF199 /* CBL_DatabaseChange.h in Headers */ = {isa = PBXBuildFile; fileRef = 2776A62E16A9BCBC006FF199 /* CBL_DatabaseChange.h */; };
2776A63116A9BCBC006FF199 /* CBL_DatabaseChange.m in Sources */ = {isa = PBXBuildFile; fileRef = 2776A62F16A9BCBC006FF199 /* CBL_DatabaseChange.m */; };
2776A63216A9BCBC006FF199 /* CBL_DatabaseChange.m in Sources */ = {isa = PBXBuildFile; fileRef = 2776A62F16A9BCBC006FF199 /* CBL_DatabaseChange.m */; };
@@ -670,8 +670,8 @@
27731F3B14967A8400815D67 /* ConfigViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ConfigViewController.xib; sourceTree = "<group>"; };
2773ADC514BD1EB80027A292 /* CBLDatabase+LocalDocs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "CBLDatabase+LocalDocs.h"; sourceTree = "<group>"; };
2773ADC614BD1EB80027A292 /* CBLDatabase+LocalDocs.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "CBLDatabase+LocalDocs.m"; sourceTree = "<group>"; };
- 2776A58F16A0C3A6006FF199 /* CBLBrowserIDAuthorizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CBLBrowserIDAuthorizer.h; sourceTree = "<group>"; };
- 2776A59016A0C3A6006FF199 /* CBLBrowserIDAuthorizer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CBLBrowserIDAuthorizer.m; sourceTree = "<group>"; };
+ 2776A58F16A0C3A6006FF199 /* CBLPersonaAuthorizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CBLPersonaAuthorizer.h; sourceTree = "<group>"; };
+ 2776A59016A0C3A6006FF199 /* CBLPersonaAuthorizer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CBLPersonaAuthorizer.m; sourceTree = "<group>"; };
2776A62E16A9BCBC006FF199 /* CBL_DatabaseChange.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CBL_DatabaseChange.h; sourceTree = "<group>"; };
2776A62F16A9BCBC006FF199 /* CBL_DatabaseChange.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CBL_DatabaseChange.m; sourceTree = "<group>"; };
27821BB5148E7D6F0099B373 /* CBL_Replicator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CBL_Replicator.h; sourceTree = "<group>"; };
@@ -1221,8 +1221,8 @@
270F5704156AE0BF000FEB8F /* CBLAuthorizer.m */,
27F128AF156AC1C8008465C2 /* CBLOAuth1Authorizer.h */,
27F128B0156AC1C9008465C2 /* CBLOAuth1Authorizer.m */,
- 2776A58F16A0C3A6006FF199 /* CBLBrowserIDAuthorizer.h */,
- 2776A59016A0C3A6006FF199 /* CBLBrowserIDAuthorizer.m */,
+ 2776A58F16A0C3A6006FF199 /* CBLPersonaAuthorizer.h */,
+ 2776A59016A0C3A6006FF199 /* CBLPersonaAuthorizer.m */,
);
name = Auth;
sourceTree = "<group>";
@@ -1673,7 +1673,7 @@
27846FBC15D475DF0030122F /* MYStreamUtils.h in Headers */,
270D6FC1164484190081812D /* CBLSocketChangeTracker.h in Headers */,
275A29021649A11900B0D8EE /* CouchbaseLitePrivate.h in Headers */,
- 2776A59116A0C3A6006FF199 /* CBLBrowserIDAuthorizer.h in Headers */,
+ 2776A59116A0C3A6006FF199 /* CBLPersonaAuthorizer.h in Headers */,
2776A63016A9BCBC006FF199 /* CBL_DatabaseChange.h in Headers */,
271C2AD416FA176300B8C9DB /* CBL_Shared.h in Headers */,
);
@@ -1726,7 +1726,7 @@
275A29051649A13900B0D8EE /* CBLReplication.h in Headers */,
27F5B18716519F2400126D0D /* CBLUITableSource.h in Headers */,
27F5B18916519F8F00126D0D /* MYDynamicObject.h in Headers */,
- 2776A59216A0C3A6006FF199 /* CBLBrowserIDAuthorizer.h in Headers */,
+ 2776A59216A0C3A6006FF199 /* CBLPersonaAuthorizer.h in Headers */,
275A24E016B986CD00561DF0 /* CBLJSON.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
@@ -2165,7 +2165,7 @@
27846FBD15D475DF0030122F /* MYStreamUtils.m in Sources */,
270D6FC2164484190081812D /* CBLSocketChangeTracker.m in Sources */,
27B15517164A118100DF5E2C /* CBL_Database_Tests.m in Sources */,
- 2776A59316A0C3A6006FF199 /* CBLBrowserIDAuthorizer.m in Sources */,
+ 2776A59316A0C3A6006FF199 /* CBLPersonaAuthorizer.m in Sources */,
2776A63116A9BCBC006FF199 /* CBL_DatabaseChange.m in Sources */,
271C2AD516FA176300B8C9DB /* CBL_Shared.m in Sources */,
);
@@ -2287,7 +2287,7 @@
27DA435215918C0200F9E7B5 /* MYDynamicObject.m in Sources */,
27846FBB15D475DF0030122F /* MYRegexUtils.m in Sources */,
27846FBE15D475DF0030122F /* MYStreamUtils.m in Sources */,
- 2776A59616A0C3B1006FF199 /* CBLBrowserIDAuthorizer.m in Sources */,
+ 2776A59616A0C3B1006FF199 /* CBLPersonaAuthorizer.m in Sources */,
2776A63216A9BCBC006FF199 /* CBL_DatabaseChange.m in Sources */,
271C2AD616FA176300B8C9DB /* CBL_Shared.m in Sources */,
);
10 Source/API/CBLManager.m
View
@@ -16,7 +16,7 @@
#import "CBL_ReplicatorManager.h"
#import "CBL_Server.h"
#import "CBL_URLProtocol.h"
-#import "CBLBrowserIDAuthorizer.h"
+#import "CBLPersonaAuthorizer.h"
#import "CBLOAuth1Authorizer.h"
#import "CBL_Shared.h"
#import "CBLInternal.h"
@@ -470,10 +470,10 @@ - (CBLStatus) parseReplicatorProperties: (NSDictionary*)properties
tokenSecret: tokenSec
signatureMethod: sigMethod];
} else {
- NSDictionary* browserid = $castIf(NSDictionary, auth[@"browserid"]);
- if (browserid) {
- NSString* email = $castIf(NSString, browserid[@"email"]);
- *outAuthorizer = [[CBLBrowserIDAuthorizer alloc] initWithEmailAddress: email];
+ NSDictionary* persona = $castIf(NSDictionary, auth[@"persona"]);
+ if (persona) {
+ NSString* email = $castIf(NSString, persona[@"email"]);
+ *outAuthorizer = [[CBLPersonaAuthorizer alloc] initWithEmailAddress: email];
}
}
if (!*outAuthorizer)
18 Source/API/CBLReplication.h
View
@@ -76,23 +76,23 @@ typedef enum {
and optionally "signature_method". */
@property (nonatomic, copy) NSDictionary* OAuth;
-/** The base URL of the remote server, for use as the "origin" parameter when requesting BrowserID authentication. */
-@property (readonly) NSURL* browserIDOrigin;
+/** The base URL of the remote server, for use as the "origin" parameter when requesting Persona authentication. */
+@property (readonly) NSURL* personaOrigin;
-/** Email address for remote login with BrowserID (aka Persona). This is stored persistently in
+/** Email address for remote login with Persona (aka BrowserID). This is stored persistently in
the replication document, but it's not sufficient for login (you also need to go through the
- BrowserID protocol to get a signed assertion, which you then pass to the
- -registerBrowserIDAssertion: method.)*/
-@property (nonatomic, copy) NSString* browserIDEmailAddress;
+ Persona protocol to get a signed assertion, which you then pass to the
+ -registerPersonaAssertion: method.)*/
+@property (nonatomic, copy) NSString* personaEmailAddress;
-/** Registers a BrowserID 'assertion' (ID verification) string that will be used on the next login to the remote server. This also sets browserIDEmailAddress.
+/** Registers a Persona 'assertion' (ID verification) string that will be used on the next login to the remote server. This also sets personaEmailAddress.
Note: An assertion is a type of certificate and typically has a very short lifespan (like, a
few minutes.) For this reason it's not stored in the replication document, but instead kept
- in an in-memory registry private to the BrowserID authorizer. You should initiate a replication
+ in an in-memory registry private to the Persona authorizer. You should initiate a replication
immediately after registering the assertion, so that the replicator engine can use it to
authenticate before it expires. After that, the replicator will have a login session cookie
that should last significantly longer before needing to be renewed. */
-- (bool) registerBrowserIDAssertion: (NSString*)assertion __attribute__((nonnull));
+- (bool) registerPersonaAssertion: (NSString*)assertion __attribute__((nonnull));
#pragma mark - STATUS:
22 Source/API/CBLReplication.m
View
@@ -13,7 +13,7 @@
#import "CBLDatabase+Replication.h"
#import "CBLManager+Internal.h"
#import "CBL_Server.h"
-#import "CBLBrowserIDAuthorizer.h"
+#import "CBLPersonaAuthorizer.h"
#import "MYBlockUtils.h"
#import "MYURLUtils.h"
@@ -251,29 +251,29 @@ - (void) setOAuth: (NSDictionary*)oauth {
[self setRemoteDictionaryValue: auth forKey: @"auth"];
}
-- (NSURL*) browserIDOrigin {
- return [CBLBrowserIDAuthorizer originForSite: self.remoteURL];
+- (NSURL*) personaOrigin {
+ return [CBLPersonaAuthorizer originForSite: self.remoteURL];
}
-- (NSString*) browserIDEmailAddress {
+- (NSString*) personaEmailAddress {
NSDictionary* auth = $castIf(NSDictionary, (self.remoteDictionary)[@"auth"]);
- return auth[@"browserid"][@"email"];
+ return auth[@"persona"][@"email"];
}
-- (void) setBrowserIDEmailAddress:(NSString *)email {
+- (void) setPersonaEmailAddress:(NSString *)email {
NSDictionary* auth = nil;
if (email)
- auth = @{@"browserid": @{@"email": email}};
+ auth = @{@"persona": @{@"email": email}};
[self setRemoteDictionaryValue: auth forKey: @"auth"];
}
-- (bool) registerBrowserIDAssertion: (NSString*)assertion {
- NSString* email = [CBLBrowserIDAuthorizer registerAssertion: assertion];
+- (bool) registerPersonaAssertion: (NSString*)assertion {
+ NSString* email = [CBLPersonaAuthorizer registerAssertion: assertion];
if (!email) {
- Warn(@"Invalid BrowserID assertion: %@", assertion);
+ Warn(@"Invalid Persona assertion: %@", assertion);
return false;
}
- self.browserIDEmailAddress = email;
+ self.personaEmailAddress = email;
[self restart];
return true;
}
5 Source/CBLBrowserIDAuthorizer.h → Source/CBLPersonaAuthorizer.h
View
@@ -1,5 +1,5 @@
//
-// CBLBrowserIDAuthorizer.h
+// CBLPersonaAuthorizer.h
// CouchbaseLite
//
// Created by Jens Alfke on 1/9/13.
@@ -8,7 +8,8 @@
#import "CBLAuthorizer.h"
-@interface CBLBrowserIDAuthorizer: NSObject <CBLAuthorizer>
+/** Authorizer for the Persona decentralized-identity system. See http://persona.org */
+@interface CBLPersonaAuthorizer: NSObject <CBLAuthorizer>
+ (NSURL*) originForSite: (NSURL*)url;
16 Source/CBLBrowserIDAuthorizer.m → Source/CBLPersonaAuthorizer.m
View
@@ -1,18 +1,18 @@
//
-// CBLBrowserIDAuthorizer.m
+// CBLPersonaAuthorizer.m
// CouchbaseLite
//
// Created by Jens Alfke on 1/9/13.
//
//
-#import "CBLBrowserIDAuthorizer.h"
+#import "CBLPersonaAuthorizer.h"
#import "CBLBase64.h"
static NSMutableDictionary* sAssertions;
-@implementation CBLBrowserIDAuthorizer
+@implementation CBLPersonaAuthorizer
static NSDictionary* decodeComponent(NSArray* components, NSUInteger index) {
@@ -126,7 +126,7 @@ - (NSString*) authorizeHTTPMessage: (CFHTTPMessageRef)message
- (NSString*) loginPathForSite:(NSURL *)site {
- return [site.path stringByAppendingPathComponent: @"_browserid"];
+ return [site.path stringByAppendingPathComponent: @"_persona"];
}
@@ -140,7 +140,7 @@ - (NSDictionary*) loginParametersForSite: (NSURL*)site {
-TestCase(TEBrowserIDAuthorizer) {
+TestCase(TEPersonaAuthorizer) {
NSString* email, *origin;
NSDate* exp;
CAssert(!parseAssertion(@"", &email, &origin, &exp));
@@ -154,13 +154,13 @@ - (NSDictionary*) loginParametersForSite: (NSURL*)site {
// Register and retrieve the sample assertion:
NSURL* originURL = [NSURL URLWithString: origin];
- CAssertEqual([CBLBrowserIDAuthorizer registerAssertion: sampleAssertion], email);
- NSString* gotAssertion = [CBLBrowserIDAuthorizer takeAssertionForEmailAddress: email
+ CAssertEqual([CBLPersonaAuthorizer registerAssertion: sampleAssertion], email);
+ NSString* gotAssertion = [CBLPersonaAuthorizer takeAssertionForEmailAddress: email
site: originURL];
CAssertEqual(gotAssertion, sampleAssertion);
// -assertionForSite: should return nil because the assertion has expired by now:
- CBLBrowserIDAuthorizer* auth = [[CBLBrowserIDAuthorizer alloc] initWithEmailAddress: email];
+ CBLPersonaAuthorizer* auth = [[CBLPersonaAuthorizer alloc] initWithEmailAddress: email];
CAssertEqual(auth.emailAddress, email);
CAssertEqual([auth assertionForSite: originURL], nil);
}
2  Source/CBLRouter_Tests.m
View
@@ -129,7 +129,7 @@ static void CheckCacheable(CBLManager* server, NSString* path) {
// This is an assertion generated by persona.org on 1/13/2013.
NSString* sampleAssertion = @"eyJhbGciOiJSUzI1NiJ9.eyJwdWJsaWMta2V5Ijp7ImFsZ29yaXRobSI6IkRTIiwieSI6ImNhNWJiYTYzZmI4MDQ2OGE0MjFjZjgxYTIzN2VlMDcwYTJlOTM4NTY0ODhiYTYzNTM0ZTU4NzJjZjllMGUwMDk0ZWQ2NDBlOGNhYmEwMjNkYjc5ODU3YjkxMzBlZGNmZGZiNmJiNTUwMWNjNTk3MTI1Y2NiMWQ1ZWQzOTVjZTMyNThlYjEwN2FjZTM1ODRiOWIwN2I4MWU5MDQ4NzhhYzBhMjFlOWZkYmRjYzNhNzNjOTg3MDAwYjk4YWUwMmZmMDQ4ODFiZDNiOTBmNzllYzVlNDU1YzliZjM3NzFkYjEzMTcxYjNkMTA2ZjM1ZDQyZmZmZjQ2ZWZiZDcwNjgyNWQiLCJwIjoiZmY2MDA0ODNkYjZhYmZjNWI0NWVhYjc4NTk0YjM1MzNkNTUwZDlmMWJmMmE5OTJhN2E4ZGFhNmRjMzRmODA0NWFkNGU2ZTBjNDI5ZDMzNGVlZWFhZWZkN2UyM2Q0ODEwYmUwMGU0Y2MxNDkyY2JhMzI1YmE4MWZmMmQ1YTViMzA1YThkMTdlYjNiZjRhMDZhMzQ5ZDM5MmUwMGQzMjk3NDRhNTE3OTM4MDM0NGU4MmExOGM0NzkzMzQzOGY4OTFlMjJhZWVmODEyZDY5YzhmNzVlMzI2Y2I3MGVhMDAwYzNmNzc2ZGZkYmQ2MDQ2MzhjMmVmNzE3ZmMyNmQwMmUxNyIsInEiOiJlMjFlMDRmOTExZDFlZDc5OTEwMDhlY2FhYjNiZjc3NTk4NDMwOWMzIiwiZyI6ImM1MmE0YTBmZjNiN2U2MWZkZjE4NjdjZTg0MTM4MzY5YTYxNTRmNGFmYTkyOTY2ZTNjODI3ZTI1Y2ZhNmNmNTA4YjkwZTVkZTQxOWUxMzM3ZTA3YTJlOWUyYTNjZDVkZWE3MDRkMTc1ZjhlYmY2YWYzOTdkNjllMTEwYjk2YWZiMTdjN2EwMzI1OTMyOWU0ODI5YjBkMDNiYmM3ODk2YjE1YjRhZGU1M2UxMzA4NThjYzM0ZDk2MjY5YWE4OTA0MWY0MDkxMzZjNzI0MmEzODg5NWM5ZDViY2NhZDRmMzg5YWYxZDdhNGJkMTM5OGJkMDcyZGZmYTg5NjIzMzM5N2EifSwicHJpbmNpcGFsIjp7ImVtYWlsIjoiamVuc0Btb29zZXlhcmQuY29tIn0sImlhdCI6MTM1ODI5NjIzNzU3NywiZXhwIjoxMzU4MzgyNjM3NTc3LCJpc3MiOiJsb2dpbi5wZXJzb25hLm9yZyJ9.RnDK118nqL2wzpLCVRzw1MI4IThgeWpul9jPl6ypyyxRMMTurlJbjFfs-BXoPaOem878G8-4D2eGWS6wd307k7xlPysevYPogfFWxK_eDHwkTq3Ts91qEDqrdV_JtgULC8c1LvX65E0TwW_GL_TM94g3CvqoQnGVxxoaMVye4ggvR7eOZjimWMzUuu4Lo9Z-VBHBj7XM0UMBie57CpGwH4_Wkv0V_LHZRRHKdnl9ISp_aGwfBObTcHG9v0P3BW9vRrCjihIn0SqOJQ9obl52rMf84GD4Lcy9NIktzfyka70xR9Sh7ALotW7rWywsTzMTu3t8AzMz2MJgGjvQmx49QA~eyJhbGciOiJEUzEyOCJ9.eyJleHAiOjEzNTgyOTY0Mzg0OTUsImF1ZCI6Imh0dHA6Ly9sb2NhbGhvc3Q6NDk4NC8ifQ.4FV2TrUQffDya0MOxOQlzJQbDNvCPF2sfTIJN7KOLvvlSFPknuIo5g";
- NSDictionary* asserted = SendBody(server, @"POST", @"/_browserid_assertion", $dict({@"assertion", sampleAssertion}), kCBLStatusOK, nil);
+ NSDictionary* asserted = SendBody(server, @"POST", @"/_persona_assertion", $dict({@"assertion", sampleAssertion}), kCBLStatusOK, nil);
CAssert(asserted[@"ok"]);
CAssertEqual(asserted[@"email"], @"jens@mooseyard.com");
6 Source/CBL_Router+Handlers.m
View
@@ -26,7 +26,7 @@
#import "CBL_Revision.h"
#import "CBL_DatabaseChange.h"
#import "CBL_Server.h"
-#import "CBLBrowserIDAuthorizer.h"
+#import "CBLPersonaAuthorizer.h"
#import "CBL_Replicator.h"
#import "CBL_ReplicatorManager.h"
#import "CBL_Pusher.h"
@@ -85,9 +85,9 @@ - (CBLStatus) do_POST_replicate {
return kCBLStatusOK;
}
-- (CBLStatus) do_POST_browserid_assertion {
+- (CBLStatus) do_POST_persona_assertion {
NSDictionary* body = self.bodyAsDictionary;
- NSString* email = [CBLBrowserIDAuthorizer registerAssertion: body[@"assertion"]];
+ NSString* email = [CBLPersonaAuthorizer registerAssertion: body[@"assertion"]];
if (email != nil) {
_response.bodyObject = $dict({@"ok", @"registered"}, {@"email", email});
return kCBLStatusOK;
2  Source/CouchbaseLite.exp
View
@@ -28,7 +28,7 @@ _kCBLDocumentChangeNotification
.objc_class_name_CBL_Replicator
.objc_class_name_CBL_Pusher
.objc_class_name_CBL_Puller
-.objc_class_name_CBLBrowserIDAuthorizer
+.objc_class_name_CBLPersonaAuthorizer
.objc_class_name_CBL_Server
.objc_class_name_CBLMultipartDocumentReader
Please sign in to comment.
Something went wrong with that request. Please try again.