Exemple #1
0
        protected virtual async Task <TokenResponse> ProcessRefreshTokenRequestAsync(TokenRequestValidationResult request)
        {
            var authRecord = new AuthRecord
            {
                AccessToken  = TokenUtils.GenerateToken(),
                RefreshToken = TokenUtils.GenerateToken(),
                RefreshedAt  = Clock.UtcNow.UtcDateTime,
            };

            var result = await AuthRecordUpdateCommand.Execute(new UpdateAuthRecordRequest
            {
                RefreshToken = request.ValidatedRequest.RefreshTokenHandle,
                AuthRecord   = authRecord
            });

            var response = new TokenResponse
            {
                AccessToken         = authRecord.AccessToken,
                AccessTokenLifetime = request.ValidatedRequest.AccessTokenLifetime,
                Custom       = request.CustomResponse,
                Scope        = string.Join(" ", request.ValidatedRequest.RefreshToken.Scopes),
                RefreshToken = authRecord.RefreshToken
            };

            return(response);
        }
Exemple #2
0
        public async Task Update(string refreshToken, AuthRecord updatedAuthRecord)
        {
            var filter = Builders <AuthRecord> .Filter.Eq("refreshToken", refreshToken);

            var update = Builders <AuthRecord> .Update
                         .Set("refreshToken", updatedAuthRecord.RefreshToken)
                         .Set("accessToken", updatedAuthRecord.AccessToken)
                         .Set("refreshedAt", updatedAuthRecord.RefreshedAt);

            await _authRecords.UpdateOneAsync(filter, update);
        }
        public async Task StoreAsync <T>(string key, T value)
        {
            var collection = _database.GetCollection <AuthRecord <T> >(COLLECTION_NAME);

            AuthRecord <T> authRecord = new AuthRecord <T>(value, key);

            var replaceOneResult = await collection.ReplaceOneAsync(
                doc => doc.Id == key,
                authRecord,
                new UpdateOptions { IsUpsert = true });

            _logger.Debug("mongo upsert match count: {matchCount}", replaceOneResult.MatchedCount);
        }
        public async Task <bool?> InsertAuthenticationRecord([NotNull] AuthRecord authRecord)
        {
            try {
                await _dbContext.AuthRecords.AddAsync(authRecord);

                var result = await _dbContext.SaveChangesAsync();

                return(result != 0);
            }
            catch (DbUpdateException e) {
                await _coreLogService.InsertRoutinizeCoreLog(new RoutinizeCoreLog {
                    Location            = $"{ nameof(AuthenticationService) }.{ nameof(InsertAuthenticationRecord) }",
                    Caller              = $"{ new StackTrace().GetFrame(4)?.GetMethod()?.DeclaringType?.FullName }",
                    BriefInformation    = nameof(DbUpdateException),
                    DetailedInformation = $"Error while inserting entry into AuthRecords.\n\n{ e.StackTrace }",
                    ParamData           = $"{ nameof(authRecord.AccountId) } = { authRecord.AccountId }",
                    Severity            = SharedEnums.LogSeverity.High.GetEnumValue()
                });

                return(null);
            }
        }
        public async ValueTask <MuzlanResponse <DownloadRecord> > DownloadTrack(TrackRecord track, AuthRecord auth, CancellationToken cancellationToken = default)
        {
            var sourceUri = new Uri(track.DownloadUri, $"?key={auth.MediaToken}");

            var fileExtension = NormalizeFileExtension(Path.GetExtension(sourceUri.LocalPath));
            var fileName      = track.Name;

            try
            {
                using var response = await _client.GetAsync(sourceUri, HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false);

                response.EnsureSuccessStatusCode();

                var contentLength = response.Content.Headers.GetValues("Content-Length").First();

                var fileSize   = int.Parse(contentLength);
                var fileOffset = 0;
                var bytesRead  = 0;
                var fileData   = new byte[fileSize];

                await OnDownloadProgressChanged(fileOffset, fileSize).ConfigureAwait(false);

                using var stream = await response.Content.ReadAsStreamAsync(cancellationToken).ConfigureAwait(false);

                bool hasCompletedEvent = false;

                do
                {
                    if (fileOffset >= fileSize)
                    {
                        break;
                    }

                    bytesRead = await stream.ReadAsync(
                        ConvertToMemory(fileData, fileOffset, 8192),
                        cancellationToken).ConfigureAwait(false);

                    fileOffset += bytesRead;

                    if (fileOffset == fileSize)
                    {
                        hasCompletedEvent = true;
                    }

                    await OnDownloadProgressChanged(fileOffset, fileSize).ConfigureAwait(false);
                } while (bytesRead > 0);

                if (!hasCompletedEvent)
                {
                    await OnDownloadProgressChanged(fileSize, fileSize).ConfigureAwait(false);
                }

                var file = new DownloadRecord(fileName + fileExtension, fileData, sourceUri);

                return(MuzlanResponse <DownloadRecord> .FromResult(file, sourceUri));
            }
            catch (Exception ex)
            {
                return(MuzlanResponse <DownloadRecord> .FromException(ex, sourceUri));
            }
        }
Exemple #6
0
 public async Task Insert(AuthRecord authRecord)
 {
     await _authRecords.InsertOneAsync(authRecord);
 }