mirror of
https://github.com/oceanprotocol/market.git
synced 2024-12-02 05:57:29 +01:00
WIP validate for dockerhub images and 3rd party images
This commit is contained in:
parent
9b78e46c97
commit
cdd5c5cf16
@ -157,7 +157,11 @@ export function MetadataAlgorithmPreview({
|
||||
/>
|
||||
)}
|
||||
{values.algorithmPrivacy && (
|
||||
<MetaItem key="dockerImage" title="Private Algorithm" content="Yes" />
|
||||
<MetaItem
|
||||
key="algorithmPreview"
|
||||
title="Private Algorithm"
|
||||
content="Yes"
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
<MetaFull values={values} />
|
||||
|
@ -11,11 +11,11 @@ import {
|
||||
initialValues as initialValuesAlgorithm,
|
||||
validationSchema as validationSchemaAlgorithm
|
||||
} from '../../../models/FormAlgoPublish'
|
||||
|
||||
import {
|
||||
transformPublishFormToMetadata,
|
||||
transformPublishAlgorithmFormToMetadata,
|
||||
mapTimeoutStringToSeconds
|
||||
mapTimeoutStringToSeconds,
|
||||
validateDockerImage
|
||||
} from '../../../utils/metadata'
|
||||
import {
|
||||
MetadataPreview,
|
||||
@ -156,10 +156,14 @@ export default function PublishPage({
|
||||
) => void
|
||||
): Promise<void> {
|
||||
const metadata = transformPublishAlgorithmFormToMetadata(values)
|
||||
|
||||
try {
|
||||
Logger.log('Publish Algorithm with ', metadata)
|
||||
|
||||
const validImage = await validateDockerImage(
|
||||
values.image,
|
||||
values.containerTag
|
||||
)
|
||||
|
||||
const ddo = await publish(
|
||||
(metadata as unknown) as Metadata,
|
||||
values.algorithmPrivacy === true ? 'compute' : 'access'
|
||||
|
@ -1,3 +1,5 @@
|
||||
import axios, { CancelToken, AxiosResponse } from 'axios'
|
||||
import { toast } from 'react-toastify'
|
||||
import {
|
||||
MetadataMarket,
|
||||
MetadataPublishFormDataset,
|
||||
@ -6,7 +8,7 @@ import {
|
||||
import { toStringNoMS } from '.'
|
||||
import AssetModel from '../models/Asset'
|
||||
import slugify from '@sindresorhus/slugify'
|
||||
import { DDO, MetadataAlgorithm } from '@oceanprotocol/lib'
|
||||
import { DDO, MetadataAlgorithm, Logger } from '@oceanprotocol/lib'
|
||||
|
||||
export function transformTags(value: string): string[] {
|
||||
const originalTags = value?.split(',')
|
||||
@ -128,6 +130,67 @@ export function transformPublishFormToMetadata(
|
||||
return metadata
|
||||
}
|
||||
|
||||
async function isDockerHubImageValid(
|
||||
image: string,
|
||||
tag: string
|
||||
): Promise<boolean> {
|
||||
try {
|
||||
const response = await axios.get(
|
||||
`https://hub.docker.com/v2/repositories/${image}/tags/${tag}`
|
||||
)
|
||||
if (!response || response.status !== 200 || !response.data) {
|
||||
toast.error(
|
||||
'Could not fetch docker hub image info. Please check image name and tag and try again'
|
||||
)
|
||||
return false
|
||||
}
|
||||
|
||||
return true
|
||||
} catch (error) {
|
||||
Logger.error(error.message)
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
async function is3rdPartyImageValid(imageURL: string): Promise<boolean> {
|
||||
try {
|
||||
const response = await axios.options(imageURL)
|
||||
if (!response || response.status !== 200) {
|
||||
toast.error(
|
||||
'Could not fetch docker image info. Please check URL and try again'
|
||||
)
|
||||
return false
|
||||
}
|
||||
return true
|
||||
} catch (error) {
|
||||
Logger.error(error.message)
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
function isUrl(image: string): boolean {
|
||||
const pattern = new RegExp(
|
||||
'^(https?:\\/\\/)?' +
|
||||
'((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|' +
|
||||
'((\\d{1,3}\\.){3}\\d{1,3}))' +
|
||||
'(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*' +
|
||||
'(\\?[;&a-z\\d%_.~+=-]*)?' +
|
||||
'(\\#[-a-z\\d_]*)?$',
|
||||
'i'
|
||||
)
|
||||
return !!pattern.test(image)
|
||||
}
|
||||
|
||||
export async function validateDockerImage(
|
||||
dockerImage: string,
|
||||
tag: string
|
||||
): Promise<boolean> {
|
||||
const isValid = isUrl(dockerImage)
|
||||
? await is3rdPartyImageValid(dockerImage)
|
||||
: await isDockerHubImageValid(dockerImage, tag)
|
||||
return isValid
|
||||
}
|
||||
|
||||
export function transformPublishAlgorithmFormToMetadata(
|
||||
{
|
||||
name,
|
||||
|
Loading…
x
Reference in New Issue
Block a user