public async Task <IActionResult> SignUsingAuthenticode(SignRequest request)
        {
            var(token, tokenConfig, tokenError) = _utils.TryGetAccessToken(request);
            if (tokenError != null)
            {
                return(tokenError);
            }

            var cert = _secretStorage.LoadAuthenticodeCertificate(token.KeyName, token.Code);

            var(artifact, artifactError, fileExtention) = await _utils.GetFileFromPayloadAsync(token, tokenConfig, request);

            if (artifactError != null)
            {
                return(artifactError);
            }

            var signed = await _signer.SignAsync(artifact, cert, tokenConfig.SignDescription, tokenConfig.SignUrl, fileExtention);

            return(File(signed, "application/octet-stream"));
        }
Exemplo n.º 2
0
        public async Task <IActionResult> SignUsingAuthenticode(AuthenticodeSignRequest request)
        {
            AccessToken token;

            try
            {
                token = _accessTokenSerializer.Deserialize(request.AccessToken);
            }
            catch (Exception ex)
            {
                _logger.LogInformation(ex, "Access token could not be decrypted");
                return(Unauthorized());
            }

            if (!_accessTokenConfig.TryGetValue(token.Id, out var tokenConfig) || !tokenConfig.Valid)
            {
                _logger.LogWarning("Access token not in config file, or marked as invalid: {Id}", token.Id);
                return(Unauthorized());
            }

            var cert = _secretStorage.LoadAuthenticodeCertificate(token.KeyName, token.Code);

            byte[] artifact;
            try
            {
                artifact = await GetFileFromPayloadAsync(token, tokenConfig, request);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "Could not retrieve artifact to sign");
                return(BadRequest(ex.Message));
            }

            var signed = await _signer.SignAsync(artifact, cert, tokenConfig.SignDescription, tokenConfig.SignUrl);

            return(File(signed, "application/octet-stream"));
        }