{"id":28522092,"url":"https://github.com/openvpn/cloudconnexa-go-client","last_synced_at":"2025-07-04T09:31:51.934Z","repository":{"id":216681759,"uuid":"741961498","full_name":"OpenVPN/cloudconnexa-go-client","owner":"OpenVPN","description":"Go client for interacting with Cloud Connexa API","archived":false,"fork":false,"pushed_at":"2025-07-03T14:24:52.000Z","size":303,"stargazers_count":6,"open_issues_count":0,"forks_count":7,"subscribers_count":8,"default_branch":"main","last_synced_at":"2025-07-03T15:33:28.169Z","etag":null,"topics":["api","client","cloudconnexa","go","go-client","openvpn","vpn"],"latest_commit_sha":null,"homepage":"https://openvpn.net/cloud-docs/developer/cloudconnexa-api-v1-1-0.html","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/OpenVPN.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-01-11T13:25:18.000Z","updated_at":"2025-07-03T14:22:39.000Z","dependencies_parsed_at":"2024-01-12T01:00:39.275Z","dependency_job_id":"9da18092-58ab-45fb-97a1-f60594c7c2a3","html_url":"https://github.com/OpenVPN/cloudconnexa-go-client","commit_stats":null,"previous_names":["openvpn/cloudconnexa-go-client"],"tags_count":28,"template":false,"template_full_name":null,"purl":"pkg:github/OpenVPN/cloudconnexa-go-client","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenVPN%2Fcloudconnexa-go-client","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenVPN%2Fcloudconnexa-go-client/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenVPN%2Fcloudconnexa-go-client/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenVPN%2Fcloudconnexa-go-client/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/OpenVPN","download_url":"https://codeload.github.com/OpenVPN/cloudconnexa-go-client/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenVPN%2Fcloudconnexa-go-client/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263354006,"owners_count":23453983,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","client","cloudconnexa","go","go-client","openvpn","vpn"],"created_at":"2025-06-09T09:08:06.414Z","updated_at":"2025-07-04T09:31:51.926Z","avatar_url":"https://github.com/OpenVPN.png","language":"Go","readme":"# Cloud Connexa Go Client\n\n[![GoDoc](https://img.shields.io/static/v1?label=godoc\u0026message=reference\u0026color=blue)](https://pkg.go.dev/github.com/openvpn/cloudconnexa-go-client/v2/cloudconnexa)\n[![Go Report Card](https://goreportcard.com/badge/github.com/openvpn/cloudconnexa-go-client/v2)](https://goreportcard.com/report/github.com/openvpn/cloudconnexa-go-client/v2)\n[![Build Status](https://github.com/openvpn/cloudconnexa-go-client/workflows/Go%20build/badge.svg)](https://github.com/openvpn/cloudconnexa-go-client/actions)\n\nThe official Go client library for the Cloud Connexa API provides programmatic access to OpenVPN Cloud Connexa services.\n\n**Full CloudConnexa API v1.1.0 Support** - Complete coverage of all public API endpoints with modern Go patterns.\n\n## Table of Contents\n\n- [Installation](#installation)\n- [Quick Start](#quick-start)\n- [Authentication](#authentication)\n- [Usage Examples](#usage-examples)\n- [API Coverage](#api-coverage)\n- [Configuration](#configuration)\n- [Testing](#testing)\n- [Contributing](#contributing)\n- [Versioning](#versioning)\n- [License](#license)\n- [Support](#support)\n\n## Installation\n\nRequires Go 1.23 or later.\n\n```bash\ngo get github.com/openvpn/cloudconnexa-go-client/v2/cloudconnexa\n```\n\n## Quick Start\n\n```go\npackage main\n\nimport (\n    \"fmt\"\n    \"log\"\n\n    \"github.com/openvpn/cloudconnexa-go-client/v2/cloudconnexa\"\n)\n\nfunc main() {\n    client, err := cloudconnexa.NewClient(\"https://myorg.api.openvpn.com\", \"client_id\", \"client_secret\")\n    if err != nil {\n        log.Fatal(err)\n    }\n\n    // List networks\n    networks, err := client.Networks.List()\n    if err != nil {\n        log.Fatal(err)\n    }\n\n    fmt.Printf(\"Found %d networks\\n\", len(networks))\n}\n```\n\n## Authentication\n\nThe client requires three parameters for authentication:\n\n- `api_url`: Your organisation's API endpoint (e.g., `https://myorg.api.openvpn.com`)\n- `client_id`: OAuth2 client ID\n- `client_secret`: OAuth2 client secret\n\n```go\nclient, err := cloudconnexa.NewClient(apiURL, clientID, clientSecret)\nif err != nil {\n    return err\n}\n```\n\n## Usage Examples\n\n### Network Management\n\n```go\n// Create a network\nnetwork := cloudconnexa.Network{\n    Name:           \"production-network\",\n    Description:    \"Production environment network\",\n    InternetAccess: cloudconnexa.InternetAccessSplitTunnelOn,\n    Egress:         true,\n}\n\ncreatedNetwork, err := client.Networks.Create(network)\nif err != nil {\n    log.Fatal(err)\n}\n\n// List networks with pagination\nnetworks, pagination, err := client.Networks.GetByPage(1, 10)\nif err != nil {\n    log.Fatal(err)\n}\n\n// Update a network\nupdatedNetwork, err := client.Networks.Update(networkID, network)\nif err != nil {\n    log.Fatal(err)\n}\n\n// Delete a network\nerr = client.Networks.Delete(networkID)\nif err != nil {\n    log.Fatal(err)\n}\n```\n\n### User Management\n\n```go\n// Create a user\nuser := cloudconnexa.User{\n    Username:  \"john.doe\",\n    Email:     \"john.doe@company.com\",\n    FirstName: \"John\",\n    LastName:  \"Doe\",\n    GroupID:   \"group-123\",\n}\n\ncreatedUser, err := client.Users.Create(user)\nif err != nil {\n    log.Fatal(err)\n}\n\n// List users with filtering\nusers, err := client.Users.List(\"\", \"active\")\nif err != nil {\n    log.Fatal(err)\n}\n\n// Get user by ID\nuser, err := client.Users.GetByID(userID)\nif err != nil {\n    log.Fatal(err)\n}\n```\n\n### Connector Management\n\n```go\n// List connectors\nconnectors, err := client.Connectors.List()\nif err != nil {\n    log.Fatal(err)\n}\n\n// Create a connector\nconnector := cloudconnexa.Connector{\n    Name:        \"office-connector\",\n    Description: \"Main office connector\",\n    NetworkID:   networkID,\n}\n\ncreatedConnector, err := client.Connectors.Create(connector)\nif err != nil {\n    log.Fatal(err)\n}\n```\n\n### Host Management\n\n```go\n// List hosts\nhosts, err := client.Hosts.List()\nif err != nil {\n    log.Fatal(err)\n}\n\n// Get host by ID\nhost, err := client.Hosts.GetByID(hostID)\nif err != nil {\n    log.Fatal(err)\n}\n```\n\n### DNS Records\n\n```go\n// List DNS records\ndnsRecords, err := client.DNSRecords.List()\nif err != nil {\n    log.Fatal(err)\n}\n\n// Create DNS record\nrecord := cloudconnexa.DNSRecord{\n    Domain:      \"api.internal.company.com\",\n    Description: \"Internal API endpoint\",\n    IPAddress:   \"10.0.1.100\",\n}\n\ncreatedRecord, err := client.DNSRecords.Create(record)\nif err != nil {\n    log.Fatal(err)\n}\n```\n\n## API Coverage\n\nThe client provides **100% coverage** of the CloudConnexa API v1.1.0 with all public endpoints:\n\n### **Core Resources**\n\n- **Networks** - Complete network lifecycle management (CRUD operations)\n- **Users** - User management, authentication, and device associations\n- **User Groups** - Group policies, permissions, and access control\n- **VPN Regions** - Available VPN server regions and capabilities\n\n### **Connectivity \u0026 Infrastructure**\n\n- **Network Connectors** - Site-to-site connectivity with IPsec tunnel support\n- **Host Connectors** - Host-based connectivity and routing\n- **Hosts** - Host configuration, monitoring, and IP services\n- **Routes** - Network routing configuration and management\n\n### **Services \u0026 Monitoring**\n\n- **DNS Records** - Private DNS management with direct endpoint access\n- **Host IP Services** - Service definitions and port configurations\n- **Sessions** - OpenVPN session monitoring and analytics\n- **Devices** - Device lifecycle management and security controls\n\n### **Security \u0026 Access Control**\n\n- **Access Groups** - Fine-grained access policies and rules\n- **Location Contexts** - Location-based access controls\n- **Settings** - System-wide configuration and preferences\n\n### **API v1.1.0 Features**\n\n- **Direct Endpoints**: Optimised single-call access for DNS Records and User Groups\n- **Enhanced Sessions API**: Complete OpenVPN session monitoring with cursor-based pagination\n- **Comprehensive Devices API**: Full device management with filtering and bulk operations\n- **IPsec Support**: Start/stop IPsec tunnels for Network Connectors\n- **Updated DTOs**: Simplified data structures aligned with API v1.1.0\n\n### **All Endpoints Support**\n\n- **Pagination** - Both cursor-based (Sessions) and page-based (legacy) pagination\n- **Error Handling** - Structured error types with detailed messages\n- **Rate Limiting** - Automatic rate limiting with configurable limits\n- **Type Safety** - Strong typing with comprehensive validation\n- **Concurrent Safety** - Thread-safe operations for production use\n- **Performance Optimized** - Direct API calls where available\n\n## Configuration\n\n### Rate Limiting\n\nThe client includes built-in rate limiting to respect API limits:\n\n```go\n// Rate limiting is automatic, no configuration needed\nclient, err := cloudconnexa.NewClient(apiURL, clientID, clientSecret)\n```\n\n### Custom HTTP Client\n\n```go\nimport (\n    \"net/http\"\n    \"time\"\n)\n\n// Use custom HTTP client with timeout\nhttpClient := \u0026http.Client{\n    Timeout: 30 * time.Second,\n}\n\nclient, err := cloudconnexa.NewClient(apiURL, clientID, clientSecret)\n// Client uses default HTTP client with sensible timeouts\n```\n\n### Error Handling\n\nThe client provides structured error types:\n\n```go\nnetworks, err := client.Networks.List()\nif err != nil {\n    if clientErr, ok := err.(*cloudconnexa.ErrClientResponse); ok {\n        fmt.Printf(\"API Error: %d - %s\\n\", clientErr.StatusCode, clientErr.Message)\n    } else {\n        fmt.Printf(\"Network Error: %v\\n\", err)\n    }\n}\n```\n\n## Testing\n\n### Unit Tests\n\n```bash\n# Run unit tests\nmake test\n\n# Run tests with coverage\ngo test -v -race -coverprofile=coverage.txt ./cloudconnexa/...\n```\n\n### End-to-End Tests\n\n```bash\n# Run e2e tests (requires API credentials)\nexport CLOUDCONNEXA_BASE_URL=\"https://your-org.api.openvpn.com\"\nexport CLOUDCONNEXA_CLIENT_ID=\"your-client-id\"\nexport CLOUDCONNEXA_CLIENT_SECRET=\"your-client-secret\"\n\nmake e2e\n```\n\n### Linting\n\n```bash\n# Run linters\nmake lint\n\n# Install golangci-lint if needed\ngo install github.com/golangci/golangci-lint/cmd/golangci-lint@latest\n```\n\n## Contributing\n\nWe welcome contributions! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for details.\n\n### Development Setup\n\n1. Fork the repository\n2. Clone your fork\n3. Install dependencies: `make deps`\n4. Run tests: `make test`\n5. Run linters: `make lint`\n6. Submit a Pull Request\n\n### Code Standards\n\n- Follow Go conventions and best practices\n- Write comprehensive tests for new features\n- Update documentation for API changes\n- Use meaningful commit messages\n\n## Versioning\n\nThis project follows [Semantic Versioning](https://semver.org/):\n\n- **Major version**: Breaking API changes\n- **Minor version**: New features, backward compatible\n- **Patch version**: Bug fixes, backward compatible\n\nCurrent version: `v2.x.x`\n\n### Changelog\n\nSee [Releases](https://github.com/openvpn/cloudconnexa-go-client/releases) for the detailed changelog.\n\n## License\n\nLicensed under the Apache License, Version 2.0. See [LICENSE](LICENSE) file for details.\n\n## Support\n\n### Documentation\n\n- [Cloud Connexa API Documentation](https://openvpn.net/cloud-docs/developer/cloudconnexa-api-v1-1-0.html)\n- [Go Package Documentation](https://pkg.go.dev/github.com/openvpn/cloudconnexa-go-client/v2/cloudconnexa)\n\n### Issues and Questions\n\n- **Bug reports**: [GitHub Issues](https://github.com/openvpn/cloudconnexa-go-client/issues)\n- **Feature requests**: [GitHub Issues](https://github.com/openvpn/cloudconnexa-go-client/issues)\n- **Security issues**: Email [security@openvpn.net](mailto:security@openvpn.net?subject=Security%20Issue%20in%20cloudconnexa-go-client)\n\n### Requirements\n\n- Go 1.23 or later\n- Valid Cloud Connexa API credentials\n- Network access to Cloud Connexa API endpoints\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenvpn%2Fcloudconnexa-go-client","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopenvpn%2Fcloudconnexa-go-client","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenvpn%2Fcloudconnexa-go-client/lists"}