69 lines
1.3 KiB
Go
69 lines
1.3 KiB
Go
package azure
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"strconv"
|
|
"time"
|
|
|
|
"github.com/Azure/go-autorest/autorest/adal"
|
|
)
|
|
|
|
// AADMock implements a AAD mock server .
|
|
type AADMock struct {
|
|
server *httptest.Server
|
|
OnAcquireToken func(http.ResponseWriter, *http.Request)
|
|
}
|
|
|
|
// NewAADMock creates a new AAD server mocker.
|
|
func NewAADMock() *AADMock {
|
|
aadServer := new(AADMock)
|
|
aadServer.start()
|
|
|
|
return aadServer
|
|
}
|
|
|
|
// Start the AAD server mocker.
|
|
func (mock *AADMock) start() {
|
|
if mock.server != nil {
|
|
return
|
|
}
|
|
|
|
mock.server = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
if mock.OnAcquireToken != nil {
|
|
mock.OnAcquireToken(w, r)
|
|
return
|
|
}
|
|
|
|
w.WriteHeader(http.StatusOK)
|
|
token := adal.Token{
|
|
AccessToken: "Test Token",
|
|
NotBefore: strconv.FormatInt(time.Now().UnixNano(), 10),
|
|
ExpiresIn: strconv.FormatInt(int64(time.Minute), 10),
|
|
}
|
|
|
|
b := new(bytes.Buffer)
|
|
json.NewEncoder(b).Encode(token)
|
|
w.Write(b.Bytes())
|
|
}))
|
|
}
|
|
|
|
// GetServerURL returns the mock server URL.
|
|
func (mock *AADMock) GetServerURL() string {
|
|
if mock.server != nil {
|
|
return mock.server.URL
|
|
}
|
|
|
|
panic("Mock server is not initialized.")
|
|
}
|
|
|
|
// Close terminates the AAD server mocker.
|
|
func (mock *AADMock) Close() {
|
|
if mock.server != nil {
|
|
mock.server.Close()
|
|
mock.server = nil
|
|
}
|
|
}
|