A comprehensive domain management system built with React (TypeScript) and Rust, utilizing the Openprovider API.
This project provides a complete domain management solution for resellers using the Openprovider platform. It features a modern, user-friendly React frontend and a powerful Rust backend that communicates with the Openprovider API.
-
Customer Management
- Create and manage customer handles
- Search and filter customers
- Handle TLD-specific additional data requirements
-
Domain Management
- Check domain availability across multiple TLDs
- Register domains with all necessary contact data
- Transfer domains with authentication codes
- Manage domain settings (nameservers, contacts, etc.)
- Renew domains and retrieve/reset auth codes
-
DNS Management
- Create and delete DNS zones
- Add, edit, and remove DNS records
- Support for all record types (A, AAAA, MX, CNAME, TXT, etc.)
- DNSSEC support
The system follows a client-server architecture:
- Frontend: React with TypeScript, Chakra UI for components, and React Router for navigation
- Backend: Rust with Actix Web for the HTTP server, communicating with the Openprovider API
Feature | Screenshot |
---|---|
Domain Management | ![]() |
Customer Management | ![]() |
DNS Management | ![]() |
DNS Records | ![]() |
Domain Registration | ![]() |
- Node.js 16+ and npm/yarn
- Rust 1.60+ and Cargo
- An Openprovider reseller account
-
Clone the repository:
git clone https://github.com/hichamdotpage/op-react-rust.git cd op-react-rust/backend
-
Create a
.env
file with your Openprovider credentials:OPENPROVIDER_API_URL=https://api.openprovider.eu/v1beta OPENPROVIDER_USERNAME=your_username OPENPROVIDER_PASSWORD=your_password SERVER_HOST=127.0.0.1 SERVER_PORT=8080 CORS_ALLOWED_ORIGINS=http://localhost:3000
-
Build and run the backend:
cargo build --release cargo run --release
-
Navigate to the frontend directory:
cd ../frontend
-
Install dependencies:
npm install # or yarn install
-
Create a
.env
file to configure the API endpoint:REACT_APP_API_URL=http://localhost:8080/api
-
Start the development server:
npm start # or yarn start
- Open your browser and navigate to
http://localhost:3000
- Log in with your Openprovider credentials
- Navigate through the interface to manage customers, domains, and DNS settings
frontend/
├── public/ # Static assets
├── src/
│ ├── components/ # Reusable UI components
│ │ ├── common/ # Shared components
│ │ ├── customers/ # Customer management components
│ │ ├── domains/ # Domain management components
│ │ └── dns/ # DNS management components
│ ├── pages/ # Page components
│ ├── api/ # API client
│ ├── context/ # React context for state management
│ ├── hooks/ # Custom React hooks
│ ├── types/ # TypeScript type definitions
│ ├── utils/ # Utility functions
│ ├── App.tsx # Main application component
│ └── index.tsx # Application entry point
└── package.json # Frontend dependencies
backend/
├── src/
│ ├── api/ # Openprovider API client
│ ├── handlers/ # Request handlers
│ ├── models/ # Data models
│ ├── routes/ # API routes
│ └── main.rs # Application entry point
└── Cargo.toml # Rust dependencies
The backend provides the following API endpoints:
-
Authentication
POST /api/auth/login
- Authenticate with Openprovider credentials
-
Customers
GET /api/customers
- List customers with optional filteringPOST /api/customers
- Create a new customerGET /api/customers/{handle}
- Get customer detailsPUT /api/customers/{handle}
- Update customer informationDELETE /api/customers/{handle}
- Delete a customer
-
Domains
POST /api/domains/check
- Check domain availabilityGET /api/domains
- List domains with optional filteringPOST /api/domains
- Register a new domainPOST /api/domains/transfer
- Transfer a domainGET /api/domains/{id}
- Get domain detailsPUT /api/domains/{id}
- Update domain settingsGET /api/domains/{id}/authcode
- Get domain auth codePOST /api/domains/{id}/authcode/reset
- Reset domain auth codePOST /api/domains/{id}/renew
- Renew a domain
-
DNS
GET /api/dns/zones
- List DNS zonesPOST /api/dns/zones
- Create a DNS zoneGET /api/dns/zones/{name}
- Get DNS zone detailsPUT /api/dns/zones/{name}
- Update DNS zone recordsDELETE /api/dns/zones/{name}
- Delete a DNS zone
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature
) - Commit your changes (
git commit -m 'Add some amazing feature'
) - Push to the branch (
git push origin feature/amazing-feature
) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.