Convert code to ruby | C2C Community
Question

Convert code to ruby

  • 16 March 2023
  • 2 replies
  • 6 views

convert this C# code into ruby 

require 'securerandom'
require 'uri'
require 'base64'
require 'openssl'
require 'digest'

class InboundPftPopTokenValidator < InboundJwtTokenValidatorBase

  TokenSignerCacheSize = 500

  def initialize(clientTokenData, monitoringApi, authConfiguration, actorTokenValidator, accessTokenValidator, incomingMethod, incomingUri)
    super(clientTokenData, monitoringApi, authConfiguration, 'InboundPftPopTokenValidator', validateClientId: false)
    @clientTokenData = clientTokenData
    @actorTokenValidator = actorTokenValidator
    @accessTokenValidator = accessTokenValidator
    @incomingMethod = incomingMethod
    @incomingUri = incomingUri
    @actorTokenData = InboundJwtActorTokenData.Parse(ClientTokenData.PftPopJwtTokenData.Payload.ActorToken, monitoringApi, out _)
    @accessTokenData = InboundJwtTokenData.Parse(ClientTokenData.PftPopJwtTokenData.Payload.AccessTokenAad, monitoringApi, out _)
    @acceptedAudCollection = get_pft_audience_collection(tokenValidationError)
  end

  def validate_token_async
    if AuthConfiguration.LogInboundTokenDataWithoutSignature
      TokenLogger.LogEncodedJwtTokenData('InboundPftPopTokenValidator_TokenHeaderPayload', ClientTokenData.PostTransformedToken, MonitoringApi)
    end

    valid_pop_token_header = validate_pop_token_header_claims(tokenValidationError)
    return TokenValidationResult.FromTokenValidationError(tokenValidationError) unless valid_pop_token_header

    valid_pop_token_payload = validate_pop_token_payload_claims(tokenValidationError)
    return TokenValidationResult.FromTokenValidationError(tokenValidationError) unless valid_pop_token_payload

    if @acceptedAudCollection.nil? || tokenValidationError
      return TokenValidationResult.FromTokenValidationError(tokenValidationError)
    end
  end

  private

  def get_pft_audience_collection(tokenValidationError)
    audience_claim = @clientTokenData.PftPopJwtTokenData.Payload.Aud
    if audience_claim.nil?
      tokenValidationError = TokenValidationError.CreateAudienceClaimMissingValidationError
      return nil
    end
    audience_collection = audience_claim.split(' ').to_set
    if audience_collection.empty?
      tokenValidationError = TokenValidationError.CreateAudienceClaimMissingValidationError
      return nil
    end
    audience_collection
  end

  def validate_pop_token_header_claims(tokenValidationError)
    pop_token_header = @clientTokenData.PftPopJwtTokenData.Header
    unless pop_token_header['alg'] == 'RS256'
      tokenValidationError = TokenValidationError.CreateInvalidPopTokenAlgorithmHeaderValidationError('RS256')
      return false
    end
    unless pop_token_header['typ'] == 'pop+jwt'
      tokenValidationError = TokenValidationError.CreateInvalidPopTokenTypeHeaderValidationError('pop+jwt')
      return false
    end
    true
  end

  def validate_pop_token_payload_claims(tokenValidationError)
    pop_token_payload = @clientTokenData.PftPopJwtTokenData.Payload
    unless pop_token_payload['at'] == @clientTokenData.PftPopJwtTokenData.Payload.AccessTokenAad
      tokenValidationError = TokenValidationError.CreatePopTokenMismatchedAtValidationError
      return false
    end
    unless pop_token_payload['m'] == @incomingMethod
      tokenValidationError = TokenValidationError.CreatePopTokenMismatchedMethodValidationError
      return false
    end
    unless pop_token_payload['u'] == @incomingUri.to_s
      tokenValidationError = TokenValidationError.CreatePopTokenMismatchedUriValidationError
      return false
    end
    true
  end
end
 


2 replies

Userlevel 5
Badge +2

Hi @sayali_1998 

I didn't understand your question. Could you please elaborate more?

Cheers,

--VC

Userlevel 5
Badge +2

And welcome to C2C. I would like to invite you to introduce yourself in the C2C Lounge, so our members can get to know you better.

 

Reply