2 // SOSCloudCircleServer.h
5 // Created by Mitch Adler on 11/15/12.
9 #ifndef _SECURITY_SOSCLOUDCIRCLESERVER_H_
10 #define _SECURITY_SOSCLOUDCIRCLESERVER_H_
12 #include <SecureObjectSync/SOSCloudCircle.h>
13 #include <SecureObjectSync/SOSAccount.h>
16 // MARK: Server versions of our SPI
18 bool SOSCCTryUserCredentials_Server(CFStringRef user_label
, CFDataRef user_password
, CFErrorRef
*error
);
19 bool SOSCCSetUserCredentials_Server(CFStringRef user_label
, CFDataRef user_password
, CFErrorRef
*error
);
20 bool SOSCCCanAuthenticate_Server(CFErrorRef
*error
);
21 bool SOSCCPurgeUserCredentials_Server(CFErrorRef
*error
);
23 SOSCCStatus
SOSCCThisDeviceIsInCircle_Server(CFErrorRef
*error
);
24 bool SOSCCRequestToJoinCircle_Server(CFErrorRef
* error
);
25 bool SOSCCRequestToJoinCircleAfterRestore_Server(CFErrorRef
* error
);
26 bool SOSCCRemoveThisDeviceFromCircle_Server(CFErrorRef
* error
);
27 bool SOSCCBailFromCircle_Server(uint64_t limit_in_seconds
, CFErrorRef
* error
);
29 CFArrayRef
SOSCCCopyApplicantPeerInfo_Server(CFErrorRef
* error
);
30 bool SOSCCRejectApplicants_Server(CFArrayRef applicants
, CFErrorRef
* error
);
31 bool SOSCCAcceptApplicants_Server(CFArrayRef applicants
, CFErrorRef
* error
);
33 CFArrayRef
SOSCCCopyPeerPeerInfo_Server(CFErrorRef
* error
);
34 CFArrayRef
SOSCCCopyConcurringPeerPeerInfo_Server(CFErrorRef
* error
);
36 bool SOSCCResetToOffering_Server(CFErrorRef
* error
);
37 bool SOSCCResetToEmpty_Server(CFErrorRef
* error
);
39 CFStringRef
SOSCCCopyIncompatibilityInfo_Server(CFErrorRef
* error
);
40 enum DepartureReason
SOSCCGetLastDepartureReason_Server(CFErrorRef
* error
);
42 SyncWithAllPeersReason
SOSCCProcessSyncWithAllPeers_Server(CFErrorRef
* error
);
45 // MARK: Internal kicks.
48 void SOSCCHandleUpdate(CFDictionaryRef updates
);
50 // Expected to be called when the data source changes.
51 void SOSCCSyncWithAllPeers(void);
53 // Internal careful questioning.
54 bool SOSCCThisDeviceDefinitelyNotActiveInCircle(void);
55 void SOSCCSetThisDeviceDefinitelyNotActiveInCircle(SOSCCStatus currentStatus
);
58 // MARK: Internal access to local account for tests.
60 typedef SOSDataSourceFactoryRef (^SOSCCAccountDataSourceFactoryBlock
)();
62 SOSAccountRef
SOSKeychainAccountGetSharedAccount(void);
63 bool SOSKeychainAccountSetFactoryForAccount(SOSCCAccountDataSourceFactoryBlock factory
);
66 // MARK: Testing operations, dangerous to call in normal operation.
68 bool SOSKeychainSaveAccountDataAndPurge(CFErrorRef
*error
);
72 // MARK: Constants for where we store persistent information in the keychain
75 extern CFStringRef kSOSInternalAccessGroup
;
77 extern CFStringRef kSOSAccountLabel
;
78 extern CFStringRef kSOSPeerDataLabel
;
80 CFDataRef
SOSItemGet(CFStringRef label
, CFErrorRef
* error
);
81 bool SOSItemUpdateOrAdd(CFStringRef label
, CFStringRef accessibility
, CFDataRef data
, CFErrorRef
*error
);
83 bool SOSCCCircleIsOn_Artifact(void);