Skip to content
This repository has been archived by the owner on Nov 24, 2022. It is now read-only.

Commit

Permalink
feat: DID fetch on creating an identity (#318)
Browse files Browse the repository at this point in the history
  • Loading branch information
Dudleyneedham authored Jan 29, 2021
1 parent 895b2f5 commit fbb7141
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 5 deletions.
14 changes: 13 additions & 1 deletion src/containers/WalletAdd/WalletAdd.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import React from 'react'
import { connect } from 'react-redux'
import { RouteComponentProps } from 'react-router'
import { Link, withRouter } from 'react-router-dom'
import DidService from '../../services/DidService'

import Input from '../../components/Input/Input'
import { BalanceUtilities } from '../../services/BalanceUtilities'
Expand All @@ -13,7 +14,7 @@ import { notify, notifySuccess } from '../../services/FeedbackService'
import * as Contacts from '../../state/ducks/Contacts'
import * as Wallet from '../../state/ducks/Wallet'
import { persistentStoreInstance } from '../../state/PersistentStore'
import { IMyIdentity } from '../../types/Contact'
import { IContact, IMyIdentity } from '../../types/Contact'

import './WalletAdd.scss'

Expand Down Expand Up @@ -91,6 +92,17 @@ class WalletAdd extends React.Component<Props, State> {
},
phrase,
}

const didDocument = await DidService.fetchDID(identity)

if (didDocument) {
const did: IContact['did'] = {
identifier: didDocument.id,
document: didDocument,
}
newIdentity.did = did
}

saveIdentity(newIdentity)
persistentStoreInstance.store.dispatch(
Contacts.Store.addContact(
Expand Down
48 changes: 47 additions & 1 deletion src/services/DidService.ts
Original file line number Diff line number Diff line change
@@ -1,23 +1,69 @@
import {
BlockchainUtils,
Did,
Identity,
IDid,
IPublicIdentity,
IURLResolver,
PublicIdentity,
} from '@kiltprotocol/sdk-js'
import { IDidDocumentSigned } from '@kiltprotocol/sdk-js/build/did/Did'
import {
IDidDocument,
IDidDocumentSigned,
} from '@kiltprotocol/sdk-js/build/did/Did'
import * as Wallet from '../state/ducks/Wallet'
import { persistentStoreInstance } from '../state/PersistentStore'
import { IContact, IMyIdentity } from '../types/Contact'
import ContactRepository from './ContactRepository'
import { notifyFailure } from './FeedbackService'
import MessageRepository from './MessageRepository'

const { IS_IN_BLOCK } = BlockchainUtils

class DidService {
public static readonly URL = `${window._env_.REACT_APP_SERVICE_HOST}/contacts/did`

public static async fetchDID(
identity: Identity
): Promise<IDidDocument | null> {
const didIdentitier = await Did.queryByAddress(identity.address)
if (!didIdentitier) {
return null
}
if (!didIdentitier.documentStore) {
return Did.createDefaultDidDocument(
didIdentitier.identifier,
didIdentitier.publicBoxKey,
didIdentitier.publicSigningKey
)
}

try {
const response = await fetch(didIdentitier.documentStore)
if (!response.ok) {
throw Error(identity.address)
}
const contact = await response.json()
const { did } = contact

const verifyDid = Did.verifyDidDocumentSignature(
did,
didIdentitier.identifier
)
if (!verifyDid) {
notifyFailure('Signature on DID Document could not be verified.', false)
return null
}
return did
} catch {
notifyFailure(
'DID Document could not be fetched from the defined service.',
false
)
return null
}
}

public static async resolveDid(
identifier: string
): Promise<IPublicIdentity | null> {
Expand Down
5 changes: 2 additions & 3 deletions src/types/Contact.d.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { Identity, PublicIdentity } from '@kiltprotocol/sdk-js'
import { IDidDocumentSigned } from '@kiltprotocol/sdk-js/build/did/Did'
import { Identity, PublicIdentity, IDidDocument } from '@kiltprotocol/sdk-js'

/**
* as in prototype/services
Expand All @@ -13,7 +12,7 @@ export interface IContact {
}
did?: {
identifier?: string
document?: IDidDocumentSigned
document?: IDidDocument
}

publicIdentity: PublicIdentity
Expand Down

0 comments on commit fbb7141

Please sign in to comment.