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