예제 #1
0
        /// <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());
        }
예제 #2
0
 /// <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));
     }
 }
예제 #3
0
 /// <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);
     }
 }
예제 #4
0
        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));
                    }
                }
        }