145 lines
3.6 KiB
Markdown
145 lines
3.6 KiB
Markdown
# PrivateBin API C++ DLL
|
|
|
|
A cross-platform C++ library for interacting with PrivateBin servers.
|
|
|
|
## Overview
|
|
|
|
This library provides a simple C++ interface for interacting with PrivateBin services. PrivateBin is a minimalist, open-source online pastebin where the server has zero knowledge of stored data. All data is encrypted and decrypted in the browser using 256-bit AES encryption.
|
|
|
|
## Features
|
|
|
|
- Create new pastes with optional expiration, formatting, and security settings
|
|
- Retrieve existing pastes by ID
|
|
- Delete pastes using the deletion token
|
|
- Cross-platform compatibility (Windows and Linux)
|
|
- Support for PrivateBin API versions 1.3 and later
|
|
|
|
## Development & Build
|
|
|
|
### Prerequisites
|
|
|
|
- CMake 3.10+
|
|
- C++17-fähiger Compiler (MSVC 2022 bzw. GCC/Clang)
|
|
- Git
|
|
- vcpkg (wird bei Makefile-Nutzung automatisch gebootstrapped)
|
|
|
|
### Dependencies
|
|
|
|
- cryptopp (Crypto++)
|
|
- nlohmann-json
|
|
- Windows: WinHTTP (SDK)
|
|
- Linux: libcurl (used automatically via vcpkg)
|
|
|
|
### Quick start with Makefile (Windows & Linux)
|
|
|
|
1) Install dependencies, configure, and build:
|
|
|
|
```
|
|
make
|
|
```
|
|
|
|
2) Beispiel bauen und ausführen:
|
|
|
|
```
|
|
make example
|
|
```
|
|
|
|
The Makefile does:
|
|
- clone and bootstrap vcpkg
|
|
- install packages from `vcpkg.json`
|
|
- configure CMake with the vcpkg toolchain
|
|
- build the library and the example
|
|
|
|
### Manual with CMake
|
|
|
|
```
|
|
# clone and bootstrap vcpkg
|
|
git clone https://github.com/microsoft/vcpkg.git "$HOME/vcpkg"
|
|
"$HOME/vcpkg/bootstrap-vcpkg.sh" # Linux/macOS
|
|
# Windows (PowerShell):
|
|
# powershell -NoProfile -ExecutionPolicy Bypass -Command "& '$env:USERPROFILE\vcpkg\bootstrap-vcpkg.bat'"
|
|
|
|
# Configure
|
|
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE="$HOME/vcpkg/scripts/buildsystems/vcpkg.cmake"
|
|
|
|
# Build
|
|
cmake --build build --config Release
|
|
|
|
# Example
|
|
cmake -S example -B example/build -DCMAKE_BUILD_TYPE=Release
|
|
cmake --build example/build --config Release
|
|
```
|
|
|
|
## Usage
|
|
|
|
### API Functions
|
|
|
|
```cpp
|
|
// Create a new paste
|
|
int create_paste(const char* server_url, const char* content,
|
|
const char* password, const char* expiration,
|
|
const char* format, int burn_after_reading,
|
|
int open_discussion, char** paste_url,
|
|
char** delete_token);
|
|
|
|
// Retrieve a paste
|
|
int get_paste(const char* server_url, const char* paste_id,
|
|
const char* key, char** content);
|
|
|
|
// Delete a paste
|
|
int delete_paste(const char* server_url, const char* paste_id,
|
|
const char* delete_token);
|
|
|
|
// Free memory allocated by the API functions
|
|
void free_string(char* str);
|
|
```
|
|
|
|
### Example
|
|
|
|
```cpp
|
|
#include "privatebinapi.h"
|
|
#include <iostream>
|
|
|
|
int main() {
|
|
char* paste_url = nullptr;
|
|
char* delete_token = nullptr;
|
|
|
|
int result = create_paste(
|
|
"https://privatebin.net",
|
|
"Hello, PrivateBin!",
|
|
nullptr, // No password
|
|
"1hour", // Expire in 1 hour
|
|
"plaintext", // Plain text format
|
|
0, // Don't burn after reading
|
|
0, // No discussion
|
|
&paste_url,
|
|
&delete_token
|
|
);
|
|
|
|
if (result == 0) {
|
|
std::cout << "Paste created: " << paste_url << std::endl;
|
|
std::cout << "Delete token: " << delete_token << std::endl;
|
|
|
|
// Free allocated memory
|
|
free_string(paste_url);
|
|
free_string(delete_token);
|
|
} else {
|
|
std::cout << "Failed to create paste: " << result << std::endl;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
```
|
|
|
|
## Error Codes
|
|
|
|
- 0: Success
|
|
- 1: Network error
|
|
- 2: Encryption/decryption error
|
|
- 3: Invalid input
|
|
- 4: Server error
|
|
- 5: JSON parsing error
|
|
|
|
## License
|
|
|
|
This project is licensed under the MIT License - see the LICENSE file for details. |