# All files / src/profiles profileProofs.ts

83.33% Statements 10/12
83.33% Branches 5/6
100% Functions 2/2
83.33% Lines 10/12

Press n or j to go to the next uncovered block, b, p or k for the previous block.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    541x

    1x

    2x
    2x

    2x

    2x

    2x

    2x

    4x

    2x

     import { profileServices } from './services'

    /**
     * Validates the social proofs in a user's profile. Currently supports validation of
     * Facebook, Twitter, GitHub, Instagram, LinkedIn and HackerNews accounts.
     *
     * @param {Object} profile The JSON of the profile to be validated
     * @param {string} ownerAddress The owner bitcoin address to be validated
     * @param {string} [name=null] The Blockstack name to be validated
     * @returns {Promise} that resolves to an array of validated proof objects
     */
    export function validateProofs(profile: any,
                                   ownerAddress: string,
                                   name: string = null) {
      if (!profile) {
        throw new Error('Profile must not be null')
      }

      let accounts: Array<any> = []
      const proofsToValidate: Promise<any>[] = []

      if (profile.hasOwnProperty('account')) {
        accounts = profile.account
      } else {
        return Promise.resolve([])
      }

      accounts.forEach((account) => {
        // skip if proof service is not supported
        if (account.hasOwnProperty('service')
            && !profileServices.hasOwnProperty(account.service)) {
          return
        }

        if (!(account.hasOwnProperty('proofType')
            && account.proofType === 'http'
            && account.hasOwnProperty('proofUrl'))) {
          return
        }

        const proof = {
          service: account.service,
          proof_url: account.proofUrl,
          identifier: account.identifier,
          valid: false
        }

        proofsToValidate.push(profileServices[account.service]
          .validateProof(proof, ownerAddress, name))
      })

      return Promise.all(proofsToValidate)
    }