package openai import ( "github.com/trufflesecurity/trufflehog/v3/pkg/analyzer/analyzers" ) type OpenAIScope struct { ReadTests []analyzers.HttpStatusTest WriteTests []analyzers.HttpStatusTest Endpoints []string ReadPermission Permission WritePermission Permission } func (s *OpenAIScope) RunTests(key string) error { headers := map[string]string{ "Authorization": "Bearer " + key, "Content-Type": "application/json", } for i := range s.ReadTests { test := &s.ReadTests[i] if err := test.RunTest(headers); err != nil { return err } } for i := range s.WriteTests { test := &s.WriteTests[i] if err := test.RunTest(headers); err != nil { return err } } return nil } var SCOPES = []OpenAIScope{ { ReadTests: []analyzers.HttpStatusTest{ {URL: BASE_URL + "/v1/models", Method: "GET", Valid: []int{200}, Invalid: []int{403}, Type: analyzers.READ, Status: analyzers.PermissionStatus{}}, }, Endpoints: []string{"/v1/models"}, ReadPermission: ModelsRead, }, { WriteTests: []analyzers.HttpStatusTest{ {URL: BASE_URL + "/v1/images/generations", Method: "POST", Payload: POST_PAYLOAD, Valid: []int{400}, Invalid: []int{401}, Type: analyzers.WRITE, Status: analyzers.PermissionStatus{}}, }, Endpoints: []string{"/v1/audio", "/v1/chat/completions", "/v1/embeddings", "/v1/images", "/v1/moderations"}, WritePermission: ModelCapabilitiesWrite, }, { ReadTests: []analyzers.HttpStatusTest{ {URL: BASE_URL + "/v1/assistants", Method: "GET", Valid: []int{400}, Invalid: []int{401}, Type: analyzers.READ, Status: analyzers.PermissionStatus{}}, }, WriteTests: []analyzers.HttpStatusTest{ {URL: BASE_URL + "/v1/assistants", Method: "POST", Payload: POST_PAYLOAD, Valid: []int{400}, Invalid: []int{401}, Type: analyzers.WRITE, Status: analyzers.PermissionStatus{}}, }, Endpoints: []string{"/v1/assistants"}, ReadPermission: AssistantsRead, WritePermission: AssistantsWrite, }, { ReadTests: []analyzers.HttpStatusTest{ {URL: BASE_URL + "/v1/threads/1", Method: "GET", Valid: []int{400}, Invalid: []int{401}, Type: analyzers.READ, Status: analyzers.PermissionStatus{}}, }, WriteTests: []analyzers.HttpStatusTest{ {URL: BASE_URL + "/v1/threads", Method: "POST", Payload: POST_PAYLOAD, Valid: []int{400}, Invalid: []int{401}, Type: analyzers.WRITE, Status: analyzers.PermissionStatus{}}, }, Endpoints: []string{"/v1/threads"}, ReadPermission: ThreadsRead, WritePermission: ThreadsWrite, }, { ReadTests: []analyzers.HttpStatusTest{ {URL: BASE_URL + "/v1/fine_tuning/jobs", Method: "GET", Valid: []int{200}, Invalid: []int{401}, Type: analyzers.READ, Status: analyzers.PermissionStatus{}}, }, WriteTests: []analyzers.HttpStatusTest{ {URL: BASE_URL + "/v1/fine_tuning/jobs", Method: "POST", Payload: POST_PAYLOAD, Valid: []int{400}, Invalid: []int{401}, Type: analyzers.WRITE, Status: analyzers.PermissionStatus{}}, }, Endpoints: []string{"/v1/fine_tuning"}, ReadPermission: FineTuningRead, WritePermission: FineTuningWrite, }, { ReadTests: []analyzers.HttpStatusTest{ {URL: BASE_URL + "/v1/files", Method: "GET", Valid: []int{200}, Invalid: []int{401}, Type: analyzers.READ, Status: analyzers.PermissionStatus{}}, }, WriteTests: []analyzers.HttpStatusTest{ {URL: BASE_URL + "/v1/files", Method: "POST", Payload: POST_PAYLOAD, Valid: []int{415}, Invalid: []int{401}, Type: analyzers.WRITE, Status: analyzers.PermissionStatus{}}, }, Endpoints: []string{"/v1/files"}, ReadPermission: FilesRead, WritePermission: FilesWrite, }, }