public async Task <OssBucket> GetBucketAsync(bool tryToCreate = false) { if (!IsAuthenticated) { return(AnonymousBucket); } dynamic profile = await GetProfileAsync(); var userId = profile.userId; // an OSS bucket must have a unique name, so it should be generated in a way, // so it a Forge user gets registered into several deployments it will not cause // name collisions. So use client ID (as a salt) to generate bucket name. var userHash = Crypto.GenerateHashString(_forgeConfig.ClientId + userId); var bucketKey = $"{GetBucketPrefix()}-{userId.Substring(0, 3)}-{userHash}".ToLowerInvariant(); var bucket = new OssBucket(_forgeOSS, bucketKey, _logger); if (tryToCreate) { // TODO: VERY INEFFECTIVE!!!!! try { await bucket.CreateAsync(); } catch (ApiException e) when(e.ErrorCode == StatusCodes.Status409Conflict) { // means - the bucket already exists } } return(bucket); }
public async Task EnsureSvfAsync(OssBucket ossBucket, string hash) { var localNames = GetLocalNames(hash); var ossNames = GetOssNames(hash); using var tempFile = new TempFile(); await ossBucket.DownloadFileAsync(ossNames.ModelView, tempFile.Name); // extract SVF from the archive ZipFile.ExtractToDirectory(tempFile.Name, localNames.SvfDir, overwriteFiles: true); // TODO: non-default encoding is not supported }
public UserResolver(ResourceProvider resourceProvider, IForgeOSS forgeOSS, IBucketKeyProvider bucketKeyProvider, LocalCache localCache, ILogger <UserResolver> logger, ProfileProvider profileProvider) { _forgeOSS = forgeOSS; _localCache = localCache; _logger = logger; _bucketKeyProvider = bucketKeyProvider; _profileProvider = profileProvider; AnonymousBucket = new OssBucket(_forgeOSS, _bucketKeyProvider.AnonymousBucketKey, logger); }
public UserResolver(ResourceProvider resourceProvider, IForgeOSS forgeOSS, IOptions <ForgeConfiguration> forgeConfiguration, LocalCache localCache, ILogger <UserResolver> logger, IConfiguration configuration) { _forgeOSS = forgeOSS; _localCache = localCache; _logger = logger; _configuration = configuration; _forgeConfig = forgeConfiguration.Value; AnonymousBucket = new OssBucket(_forgeOSS, resourceProvider.BucketKey, logger); _lazyProfile = new Lazy <Task <dynamic> >(async() => await _forgeOSS.GetProfileAsync(Token)); }
/// <summary> /// Ensure that project attributes are cached locally. /// </summary> public async Task EnsureAttributesAsync(OssBucket ossBucket, bool ensureDir = true) { // ensure the directory exists if (ensureDir) { Directory.CreateDirectory(Project.LocalAttributes.BaseDir); } // download metadata and thumbnail await Task.WhenAll( ossBucket.EnsureFileAsync(Project.OssAttributes.Metadata, Project.LocalAttributes.Metadata), ossBucket.EnsureFileAsync(Project.OssAttributes.Thumbnail, Project.LocalAttributes.Thumbnail) ); }
/// <summary> /// Ensure the project is cached locally. /// </summary> public async Task EnsureLocalAsync(OssBucket ossBucket) { // make sure that there are no leftovers from previous incarnations of the project DeleteLocal(); await EnsureAttributesAsync(ossBucket, ensureDir : true); // download ZIP with SVF model // NOTE: this step is impossible without having project metadata, // because file/dir names depends on hash of initial project state await EnsureViewablesAsync(ossBucket, Metadata.Hash, ensureDir : true); }
/// <summary> /// Ensure that project attributes are cached locally. /// </summary> public async Task EnsureAttributesAsync(OssBucket ossBucket, bool ensureDir = true) { // ensure the directory exists var localAttributes = Project.LocalAttributes; if (ensureDir) { Directory.CreateDirectory(localAttributes.BaseDir); } // download metadata and thumbnail var ossAttributes = Project.OssAttributes; await Task.WhenAll( ossBucket.EnsureFileAsync(ossAttributes.Metadata, localAttributes.Metadata), ossBucket.EnsureFileAsync(ossAttributes.Thumbnail, localAttributes.Thumbnail), ossBucket.EnsureFileAsync(ossAttributes.DrawingsList, localAttributes.DrawingsList) ); }
public async Task <OssBucket> GetBucketAsync(bool tryToCreate = false) { var bucket = new OssBucket(_forgeOSS, await _bucketKeyProvider.GetBucketKeyAsync(), _logger); if (tryToCreate) { // TODO: VERY INEFFECTIVE!!!!! try { await bucket.CreateAsync(); } catch (ApiException e) when(e.ErrorCode == StatusCodes.Status409Conflict) { // means - the bucket already exists } } return(bucket); }
/// <summary> /// Ensure the project viewables are cached locally. /// </summary> /// <param name="ossBucket">OSS bucket.</param> /// <param name="hash">Parameters hash.</param> /// <param name="ensureDir">Create local dir if necessary.</param> public async Task EnsureViewablesAsync(OssBucket ossBucket, string hash, bool ensureDir = true) { var localNames = GetLocalNames(hash); // create the "hashed" dir if (ensureDir) { Directory.CreateDirectory(localNames.BaseDir); } OSSObjectNameProvider ossNames = GetOssNames(hash); using var tempFile = new TempFile(); await Task.WhenAll( ossBucket.DownloadFileAsync(ossNames.ModelView, tempFile.Name), ossBucket.DownloadFileAsync(ossNames.Parameters, localNames.Parameters), ossBucket.DownloadFileAsync(ossNames.Bom, localNames.BOM) ); // extract SVF from the archive ZipFile.ExtractToDirectory(tempFile.Name, localNames.SvfDir, overwriteFiles: true); // TODO: non-default encoding is not supported }