# Copyright (C) 2005-2024 Splunk Inc. All Rights Reserved. import json from integrations.commons.rest import RestMethods from integrations.commons.logutil import get_logger logger = get_logger(name=__name__) class Resource(object): verify_ssl_cert = True @classmethod def create(cls, server, data): raise NotImplementedError('Derived class did not implement `create`.') @classmethod def read(cls, server, data): raise NotImplementedError('Derived class did not implement `read`.') @classmethod def update(cls, server, data): raise NotImplementedError('Derived class did not implement `update`.') @classmethod def delete(cls, server, data): raise NotImplementedError('Derived class did not implement `delete`.') @classmethod def get_url(cls, server, resource_name): return server.get_rest_endpoint() + resource_name class Result(object): def __init__(self, item, errors): self.item = item self.errors = errors # anything other than desired status code of say 200 or 201, can use this class PhantomAPIError(Exception): pass class Container(Resource): resource_name = 'container' @classmethod def create(cls, server, data): data_json = json.dumps(data) url = cls.get_url(server, cls.resource_name) status_code, response = RestMethods.post(url, data_json=data_json, headers=server.get_rest_headers(), verify=cls.verify_ssl_cert) if status_code == 200: return Result(response, None) else: return Result(None, response) class Artifact(Resource): resource_name = 'artifact' @classmethod def create(cls, server, data): data_json = json.dumps(data) url = cls.get_url(server, cls.resource_name) status_code, response = RestMethods.post(url + '', data_json=data_json, headers=server.get_rest_headers(), verify=cls.verify_ssl_cert) if status_code == 200: return Result(response, None) else: return Result(None, response)