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