/// <summary> /// Get Paratext resources that a user has access to. /// </summary> /// <param name="userSecret">The user secret.</param> /// <param name="includeInstallableResource">If set to <c>true</c> include the installable resource.</param> /// <returns> /// The available resources. /// </returns> private async Task <IReadOnlyList <ParatextResource> > GetResourcesInternalAsync(string userId, bool includeInstallableResource) { IEnumerable <SFInstallableDblResource> resources; using (ParatextAccessLock accessLock = await GetParatextAccessLock(userId)) { resources = SFInstallableDblResource.GetInstallableDblResources( accessLock.UserSecret, this._paratextOptions.Value, this._restClientFactory, this._fileSystemService, this._jwtTokenHelper, _exceptionHandler, this._dblServerUri); } IReadOnlyDictionary <string, int> resourceRevisions = SFInstallableDblResource.GetInstalledResourceRevisions(); return(resources.OrderBy(r => r.FullName).Select(r => new ParatextResource { AvailableRevision = r.DBLRevision, InstallableResource = includeInstallableResource ? r : null, InstalledRevision = resourceRevisions .ContainsKey(r.DBLEntryUid.Id) ? resourceRevisions[r.DBLEntryUid.Id] : 0, IsConnectable = false, IsConnected = false, IsInstalled = resourceRevisions.ContainsKey(r.DBLEntryUid.Id), LanguageTag = r.LanguageID.Code, Name = r.FullName, ParatextId = r.DBLEntryUid.Id, ProjectId = null, ShortName = r.Name, }).ToArray()); }
/// <summary> /// Get access to a source for PT project repositories, based on user secret. ///</summary> private async Task <IInternetSharedRepositorySource> GetInternetSharedRepositorySource(string userId) { using (ParatextAccessLock accessLock = await GetParatextAccessLock(userId)) { return(_internetSharedRepositorySourceProvider.GetSource(accessLock.UserSecret, _sendReceiveServerUri, _registryServerUri)); } }
/// <summary> /// Gets the permission a user has to access a resource. /// </summary> /// <param name="paratextId">The paratext resource identifier.</param> /// <param name="userId">The user identifier.</param> /// <returns> /// A dictionary of permissions where the key is the user ID and the value is the permission /// </returns> /// <remarks> /// See <see cref="TextInfoPermission" /> for permission values. /// </remarks> public async Task <string> GetResourcePermissionAsync(string paratextId, string userId) { // See if the source is a resource if (paratextId.Length != SFInstallableDblResource.ResourceIdentifierLength) { // Default to no permissions for projects used as sources return(TextInfoPermission.None); } using (ParatextAccessLock accessLock = await GetParatextAccessLock(userId)) { bool canRead = SFInstallableDblResource.CheckResourcePermission( paratextId, accessLock.UserSecret, _paratextOptions.Value, _restClientFactory, _fileSystemService, _jwtTokenHelper, _exceptionHandler, _dblServerUri); return(canRead ? TextInfoPermission.Read : TextInfoPermission.None); } }
private async Task <string> CallApiAsync(UserSecret userSecret, HttpMethod method, string url, string content = null) { using (ParatextAccessLock accessLock = await GetParatextAccessLock(userSecret.Id)) using (var request = new HttpRequestMessage(method, $"api8/{url}")) { request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessLock.UserSecret.ParatextTokens.AccessToken); if (content != null) { request.Content = new StringContent(content); } HttpResponseMessage response = await _registryClient.SendAsync(request); if (response.IsSuccessStatusCode) { return(await response.Content.ReadAsStringAsync()); } else { throw new HttpRequestException(await ExceptionHandler.CreateHttpRequestErrorMessage(response)); } } }