hadv / hadv/NebulaStore

Oracle Cloud Object Storage: Additional Authentication Methods and Enhancements

Open
#37 0 comments 0 reactions 0 assignees View on GitHub
afs cloud-storage enhancement hacktoberfest help wanted oracle-cloud
Dominant language
C#
Stars
2
Forks
0
PR merge metrics
No merged PRs in 30d

Description

## Overview

Follow-up issue for Oracle Cloud Object Storage AFS adapter to implement additional authentication methods and enhancements that were deferred from the initial implementation in #35 (merged in #36).

## Background

The initial Oracle Cloud Object Storage adapter implementation (#36) successfully delivered:
- ✅ Config file authentication
- ✅ Instance principal authentication
- ✅ Core connector functionality
- ✅ Path validation
- ✅ Unit tests
- ✅ Documentation

However, some features were marked as future work and need to be implemented.

## Remaining Tasks

### 1. Resource Principal Authentication
**Priority**: Medium
**Effort**: ~4 hours

- [ ] Implement `ResourcePrincipalAuthenticationDetailsProvider` support
- [ ] Add configuration methods for resource principal
- [ ] Update `OracleCloudObjectStorageConfiguration.CreateResourcePrincipalProvider()`
- [ ] Add unit tests for resource principal configuration
- [ ] Update documentation with resource principal examples

**Use Case**: Required for OCI Functions to authenticate without storing credentials.

**Implementation Notes**:
```csharp
private IBasicAuthenticationDetailsProvider CreateResourcePrincipalProvider()
{
// Research correct OCI .NET SDK API for resource principal
// Current placeholder throws NotImplementedException
return ResourcePrincipalAuthenticationDetailsProvider.Build();
}
```

### 2. Simple Authentication with Direct Credentials
**Priority**: Low
**Effort**: ~6 hours

- [ ] Implement simple authentication using user OCID, tenancy OCID, fingerprint, and private key
- [ ] Add configuration methods: `SetSimpleAuth(userOcid, tenancyOcid, fingerprint, privateKeyPath, passphrase)`
- [ ] Handle private key file reading and parsing
- [ ] Add region configuration for simple auth
- [ ] Add unit tests for simple authentication
- [ ] Update documentation with simple auth examples

**Use Case**: Useful for testing and scenarios where config file is not available.

**Implementation Notes**:
```csharp
private IBasicAuthenticationDetailsProvider CreateSimpleProvider()
{
// Research correct constructor signature for SimpleAuthenticationDetailsProvider
// May need to read private key file and convert to appropriate format
return new SimpleAuthenticationDetailsProvider(
tenancyOcid: TenancyOcid,
userOcid: UserOcid,
fingerprint: Fingerprint,
privateKeyPath: PrivateKeyPath,
passphrase: PrivateKeyPassphrase?.ToCharArray()
);
}
```

### 3. Custom Endpoint Configuration
**Priority**: Low
**Effort**: ~2 hours

- [ ] Research how to set custom endpoint in OCI .NET SDK
- [ ] Implement endpoint configuration in `OracleCloudObjectStorageConnector.New()`
- [ ] Add validation for custom endpoint URLs
- [ ] Add unit tests for custom endpoint
- [ ] Update documentation

**Use Case**: Required for using OCI-compatible storage services or testing with local emulators.

**Current Code**:
```csharp
// Note: Custom endpoint configuration would need to be set via ClientConfiguration
// if needed in the future
```

### 4. Integration Tests
**Priority**: High
**Effort**: ~8 hours

- [ ] Create integration test project
- [ ] Set up test OCI bucket and credentials (use environment variables)
- [ ] Implement tests for:
- [ ] File upload/download
- [ ] Large file multipart upload (>5 GiB)
- [ ] Directory operations
- [ ] File move/copy operations
- [ ] Concurrent operations
- [ ] Error handling (network failures, permission errors)
- [ ] Add CI/CD integration (optional, may require OCI credentials in CI)
- [ ] Document how to run integration tests

**Note**: Integration tests require actual OCI account and credentials.

### 5. Performance Benchmarks
**Priority**: Medium
**Effort**: ~6 hours

- [ ] Create benchmark project using BenchmarkDotNet
- [ ] Benchmark scenarios:
- [ ] Small file operations (< 1 MB)
- [ ] Medium file operations (1-100 MB)
- [ ] Large file operations (> 100 MB)
- [ ] Concurrent operations
- [ ] Caching vs non-caching performance
- [ ] Compare with other AFS adapters (AWS S3, Azure Storage)
- [ ] Document performance characteristics
- [ ] Identify optimization opportunities

### 6. Additional Enhancements
**Priority**: Low
**Effort**: Variable

- [ ] Add support for OCI Object Storage lifecycle policies
- [ ] Add support for object metadata
- [ ] Add support for server-side encryption configuration
- [ ] Add support for object versioning
- [ ] Implement progress callbacks for large uploads
- [ ] Add support for pre-signed URLs
- [ ] Optimize blob listing for large directories (pagination improvements)

## Success Criteria

- [ ] All authentication methods working and tested
- [ ] Integration tests passing with real OCI Object Storage
- [ ] Performance benchmarks documented
- [ ] Documentation updated with all examples
- [ ] No breaking changes to existing API

## Dependencies

- OCI .NET SDK documentation: https://docs.oracle.com/en-us/iaas/Content/API/SDKDocs/dotnetconcepts.htm
- OCI .NET SDK GitHub: https://github.com/oracle/oci-dotnet-sdk
- Existing implementation: `afs/oraclecloud/objectstorage/`

## Related Issues

- #35 - Original migration request (closed)
- #36 - Initial implementation PR (merged)

## Notes

- Tasks can be implemented incrementally in separate PRs
- Integration tests and benchmarks may require OCI account setup
- Resource principal and simple auth require research into correct OCI .NET SDK APIs
- Consider creating separate issues for larger tasks (integration tests, benchmarks)

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.