package main import ( "context" "fmt" "log" "net/http" "os" azlog "github.com/Azure/azure-sdk-for-go/sdk/azcore/log" "github.com/Azure/azure-sdk-for-go/sdk/azidentity" "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob" "github.com/gorilla/handlers" ) var ( host string = "" port int = 5000 ) var ( subscription string = "******************************" resourceGroupName string = "******************************" storageAccountName string = "******************************" ) func GetCredential() (*azidentity.DefaultAzureCredential, error) { cred, err := azidentity.NewDefaultAzureCredential(nil) if err != nil { return nil, fmt.Errorf("azidentity.NewDefaultAzureCredential is error: %w", err) } return cred, nil } func ListContainer(ctx context.Context, cred *azidentity.DefaultAzureCredential) ([]string, error) { serviceClient, err := azblob.NewServiceClient(fmt.Sprintf("https://%v.blob.core.windows.net", storageAccountName), cred, nil) if err != nil { return nil, err } pager := serviceClient.ListContainers(nil) ret := []string{} for pager.NextPage(ctx) { resp := pager.PageResponse() for _, v := range resp.ContainerItems { ret = append(ret, *v.Name) } } return ret, nil } func setAzLogging() { azlog.SetListener(func(cls azlog.Event, msg string) { log.Println(msg) // printing log out to the console }) azlog.SetEvents(azlog.EventRequest, azlog.EventResponse) } func main() { http.HandleFunc("/msicheck", func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "text/plain") cred, err := GetCredential() if err != nil { m := fmt.Sprintf("GetCredential error: %v", err) log.Println(m) http.Error(w, m, http.StatusInternalServerError) } c, err := ListContainer(r.Context(), cred) for _, v := range c { w.Write([]byte(v)) w.Write([]byte("\n")) } }) addr := fmt.Sprintf("%v:%v", host, port) log.Printf("Listen %v\n", addr) setAzLogging() err := http.ListenAndServe(addr, handlers.LoggingHandler(os.Stdout, http.DefaultServeMux)) if err != nil { log.Fatal("ListenAndServe: ", err) } }