Files
trufflehog/pkg/analyzer/analyzers/openai/scopes.go
Dustin Decker 25b01019b3 Add permissions lookup tables (#3125)
* OpenAI LUT

* github LUT

* cleanup

* add test

* update

* update

* update openai

* update

* Add Analyze interface to Twilio (#3128)

* Add Analyze interface to Twilio

* add readme
2024-07-31 13:01:29 -07:00

95 lines
3.5 KiB
Go

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,
},
}