1
0
mirror of https://github.com/oceanprotocol/market.git synced 2024-12-02 05:57:29 +01:00
market/src/@utils/docker.ts

84 lines
2.1 KiB
TypeScript
Raw Normal View History

import { LoggerInstance } from '@oceanprotocol/lib'
import axios from 'axios'
2022-09-28 14:47:43 +02:00
import isUrl from 'is-url-superb'
import { toast } from 'react-toastify'
2022-09-28 14:47:43 +02:00
export interface dockerContainerInfo {
exists: boolean
checksum: string
}
async function getDockerHubImageChecksum(
image: string,
tag: string
2022-09-28 14:47:43 +02:00
): Promise<dockerContainerInfo> {
const containerInfo: dockerContainerInfo = {
exists: false,
checksum: null
}
try {
const response = await axios.post(
`https://dockerhub-proxy.oceanprotocol.com`,
2022-09-20 10:30:11 +02:00
{
image,
tag
}
)
if (
!response ||
response.status !== 200 ||
response.data.status !== 'success'
) {
toast.error(
2022-09-28 14:47:43 +02:00
'Could not fetch docker hub image info. Please check container image and tag and try again'
)
return containerInfo
}
containerInfo.exists = true
containerInfo.checksum = response.data.result.checksum
return containerInfo
} catch (error) {
LoggerInstance.error(error.message)
toast.error(
'Could not fetch docker hub image info. Please check container image and tag and try again'
)
return containerInfo
}
}
async function validateContainerImageUrl(
imageURL: string
): Promise<dockerContainerInfo> {
const containerInfo: dockerContainerInfo = {
exists: false,
checksum: null
}
try {
const response = await axios.head(imageURL)
if (!response || response.status !== 200) {
toast.error(
'Could not fetch docker image info. Please check URL and try again'
)
2022-09-28 14:47:43 +02:00
return containerInfo
}
2022-09-28 14:47:43 +02:00
containerInfo.exists = true
return containerInfo
} catch (error) {
LoggerInstance.error(error.message)
toast.error(
2022-09-28 14:47:43 +02:00
'Could not fetch docker image info. Please check URL and try again'
)
2022-09-28 14:47:43 +02:00
return containerInfo
}
}
2022-09-28 14:47:43 +02:00
export async function getContainerChecksum(
dockerImage: string,
tag: string
): Promise<dockerContainerInfo> {
const isValid = isUrl(dockerImage)
? await validateContainerImageUrl(dockerImage)
: await getDockerHubImageChecksum(dockerImage, tag)
return isValid
}