Skip to content

Commit 87eadc9

Browse files
authored
Provision 2.0.0
2 parents b863447 + 649c7f6 commit 87eadc9

File tree

18 files changed

+1076
-620
lines changed

18 files changed

+1076
-620
lines changed

.github/workflows/cmake-cross-compile.yml

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
name: ARM builds
22

3-
on:
4-
push:
5-
branches: [ "main", "develop" ]
6-
pull_request:
7-
branches: [ "main", "develop" ]
3+
on: push
84

95
env:
106
BUILD_TYPE: Release

.github/workflows/cmake.yml

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
name: x86_64 builds
22

3-
on:
4-
push:
5-
branches: [ "main", "develop" ]
6-
pull_request:
7-
branches: [ "main", "develop" ]
3+
on: push
84

95
env:
106
BUILD_TYPE: Release

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
bin/
2+
.dub/

CMakeLists.txt

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake-d/cmake-d)
33

44
project(Provision D)
55
option(build_anisetteserver "Build Anisette server" ON)
6+
option(build_mkcassette "Build mkcassette" OFF)
7+
option(use_native_plist "Want dlang plist" OFF)
68
option(link_libplist_dynamic "Load libplist at runtime" OFF)
79

810
include(cmake/dependencies.cmake)
@@ -28,16 +30,14 @@ else()
2830
endif()
2931
endif()
3032

31-
if (plist_FOUND)
33+
if (plist_FOUND AND NOT use_native_plist)
3234
message("Using libplist. ")
3335
add_library(plist ALIAS PkgConfig::plist)
3436
target_compile_versions(provision PUBLIC LibPlist)
3537
else()
36-
if (build_sideloadipa)
37-
message(FATAL_ERROR "Sideload IPA requires libplist development package. ")
38-
endif()
3938
message(WARNING "Using fallback Property list parser. ")
4039

40+
include(UseDub)
4141
FetchContent_Declare(
4242
plist_proj
4343
GIT_REPOSITORY https://github.com/hatf0/plist
@@ -65,3 +65,13 @@ if(build_anisetteserver)
6565

6666
target_link_libraries(anisette_server provision handy-httpd)
6767
endif()
68+
69+
if(build_mkcassette)
70+
set(MKCASSETTE_SOURCE_DIR "mkcassette/")
71+
file(GLOB_RECURSE MKCASSETTE_D_SOURCES "${MKCASSETTE_SOURCE_DIR}*.d")
72+
73+
add_executable(mkcassette ${MKCASSETTE_D_SOURCES})
74+
target_include_directories(mkcassette PUBLIC ${MKCASSETTE_SOURCE_DIR})
75+
76+
target_link_libraries(mkcassette provision)
77+
endif()

LISEZMOI.md

Lines changed: 51 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ les en-têtes HTTP à utiliser pour identifier l'appareil.
1919

2020
Plus précisément, libprovision enregistre l'appareil auprès d'apple et récupère les données ADI pour celui-ci.
2121
Une fois connecté avec cette machine, les serveurs d'Apple se rappeleront de votre appareil comme sûre,
22-
donc assurez vous de ne pas vous connecter n'importe où, et à conserver précieusement les données ADI à `~/.adi/adi.pb`.
22+
donc assurez-vous de ne pas vous connecter n'importe où, et à conserver précieusement les données ADI à `~/.adi/adi.pb`.
2323

2424
Il y avait *sideload-ipa* aussi précédemment. Le code a été retiré, car il ne fonctionnait de toute façon pas
2525
et que j'aide au développement de [SideServer]() (pas de lien officiel pour le moment), qui fonctionnera AltServer là
@@ -42,7 +42,7 @@ libplist.
4242

4343
## Compilation
4444

45-
Clonez le projet et compilez le avec DUB:
45+
Clonez le projet et compilez le avec DUB :
4646

4747
```bash
4848
git clone https://github.com/Dadoum/Provision --recursive
@@ -61,6 +61,55 @@ cmake -G Ninja .. -DCMAKE_BUILD_TYPE=Release
6161
ninja
6262
```
6363

64+
## Utilisation de libprovision
65+
66+
L'interface essaie tant bien que mal de rester proche de celle d'AuthKit, même si Provision est écrit en D.
67+
68+
```d
69+
import std.digest: toHexString;
70+
import file = std.file;
71+
import std.path: expandTilde, buildPath;
72+
import std.random: rndGen;
73+
import std.range: take, array;
74+
import std.stdio: stderr, write, writeln;
75+
import std.uni: toUpper;
76+
import std.uuid: randomUUID;
77+
78+
import provision.adi;
79+
80+
void main() {
81+
string configuration_folder = expandTilde("~/.config/Provision/");
82+
if (!file.exists(configuration_folder)) {
83+
file.mkdir(configuration_folder);
84+
}
85+
86+
ADI adi = new ADI("lib/" ~ architectureIdentifier);
87+
adi.provisioningPath = configuration_folder;
88+
Device device = new Device(configuration_folder.buildPath("device.json"));
89+
90+
if (!device.initialized) {
91+
stderr.write("Creating machine... ");
92+
device.serverFriendlyDescription = "<MacBookPro13,2> <macOS;13.1;22C65> <com.apple.AuthKit/1 (com.apple.dt.Xcode/3594.4.19)>";
93+
device.uniqueDeviceIdentifier = randomUUID().toString().toUpper();
94+
device.adiIdentifier = (cast(ubyte[]) rndGen.take(2).array()).toHexString().toLower();
95+
device.localUserUUID = (cast(ubyte[]) rndGen.take(8).array()).toHexString().toUpper();
96+
97+
stderr.writeln("done !");
98+
}
99+
100+
adi.identifier = device.adiIdentifier;
101+
if (!adi.isMachineProvisioned(-2)) {
102+
stderr.write("Machine requires provisioning... ");
103+
104+
ProvisioningSession provisioningSession = new ProvisioningSession(adi, device);
105+
provisioningSession.provision(-2);
106+
stderr.writeln("done !");
107+
}
108+
109+
// Faites ce que vous voulez avec adi !
110+
}
111+
```
112+
64113
## Soutien
65114

66115
Vous pouvez me soutenir en faisant un don avec GitHub Sponsor.

README.md

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,55 @@ cmake -G Ninja .. -DCMAKE_BUILD_TYPE=Release
7171
ninja
7272
```
7373

74+
## libprovision usage
75+
76+
The Provision API tries to be stay close to the AuthKit API, but written in D.
77+
78+
```d
79+
import std.digest: toHexString;
80+
import file = std.file;
81+
import std.path: expandTilde, buildPath;
82+
import std.random: rndGen;
83+
import std.range: take, array;
84+
import std.stdio: stderr, write, writeln;
85+
import std.uni: toUpper;
86+
import std.uuid: randomUUID;
87+
88+
import provision.adi;
89+
90+
void main() {
91+
string configuration_folder = expandTilde("~/.config/Provision/");
92+
if (!file.exists(configuration_folder)) {
93+
file.mkdir(configuration_folder);
94+
}
95+
96+
ADI adi = new ADI("lib/" ~ architectureIdentifier);
97+
adi.provisioningPath = configuration_folder;
98+
Device device = new Device(configuration_folder.buildPath("device.json"));
99+
100+
if (!device.initialized) {
101+
stderr.write("Creating machine... ");
102+
device.serverFriendlyDescription = "<MacBookPro13,2> <macOS;13.1;22C65> <com.apple.AuthKit/1 (com.apple.dt.Xcode/3594.4.19)>";
103+
device.uniqueDeviceIdentifier = randomUUID().toString().toUpper();
104+
device.adiIdentifier = (cast(ubyte[]) rndGen.take(2).array()).toHexString().toLower();
105+
device.localUserUUID = (cast(ubyte[]) rndGen.take(8).array()).toHexString().toUpper();
106+
107+
stderr.writeln("done !");
108+
}
109+
110+
adi.identifier = device.adiIdentifier;
111+
if (!adi.isMachineProvisioned(-2)) {
112+
stderr.write("Machine requires provisioning... ");
113+
114+
ProvisioningSession provisioningSession = new ProvisioningSession(adi, device);
115+
provisioningSession.provision(-2);
116+
stderr.writeln("done !");
117+
}
118+
119+
// Do stuff with adi.
120+
}
121+
```
122+
74123
## Support
75124

76125
Donations are welcome with GitHub Sponsor.

0 commit comments

Comments
 (0)