Skip to content

Commit

Permalink
Add MDM FileVault configurations
Browse files Browse the repository at this point in the history
  • Loading branch information
np5 committed Jul 31, 2023
1 parent 9e03061 commit 5cfcd8b
Show file tree
Hide file tree
Showing 5 changed files with 502 additions and 1 deletion.
4 changes: 3 additions & 1 deletion goztl.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import (
)

const (
libraryVersion = "0.1.35"
libraryVersion = "0.1.36"
userAgent = "goztl/" + libraryVersion
mediaType = "application/json"
)
Expand All @@ -41,6 +41,7 @@ type Client struct {
MDMArtifacts MDMArtifactsService
MDMBlueprints MDMBlueprintsService
MDMBlueprintArtifacts MDMBlueprintArtifactsService
MDMFileVaultConfigs MDMFileVaultConfigsService
MDMProfiles MDMProfilesService
// Monolith
MonolithCatalogs MonolithCatalogsService
Expand Down Expand Up @@ -157,6 +158,7 @@ func NewClient(httpClient *http.Client, bu string, token string, opts ...ClientO
c.MDMArtifacts = &MDMArtifactsServiceOp{client: c}
c.MDMBlueprints = &MDMBlueprintsServiceOp{client: c}
c.MDMBlueprintArtifacts = &MDMBlueprintArtifactsServiceOp{client: c}
c.MDMFileVaultConfigs = &MDMFileVaultConfigsServiceOp{client: c}
c.MDMProfiles = &MDMProfilesServiceOp{client: c}
// Monolith
c.MonolithCatalogs = &MonolithCatalogsServiceOp{client: c}
Expand Down
2 changes: 2 additions & 0 deletions mdm_blueprints.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ type MDMBlueprint struct {
CollectApps int `json:"collect_apps"`
CollectCertificates int `json:"collect_certificates"`
CollectProfiles int `json:"collect_profiles"`
FileVaultConfigID *int `json:"filevault_config"`
Created Timestamp `json:"created_at,omitempty"`
Updated Timestamp `json:"updated_at,omitempty"`
}
Expand All @@ -50,6 +51,7 @@ type MDMBlueprintRequest struct {
CollectApps int `json:"collect_apps"`
CollectCertificates int `json:"collect_certificates"`
CollectProfiles int `json:"collect_profiles"`
FileVaultConfigID *int `json:"filevault_config"`
}

type listMBOptions struct {
Expand Down
6 changes: 6 additions & 0 deletions mdm_blueprints_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ var mbListJSONResponse = `
"collect_apps": 0,
"collect_certificates": 1,
"collect_profiles": 2,
"filevault_config": null,
"created_at": "2022-07-22T01:02:03.444444",
"updated_at": "2022-07-22T01:02:03.444444"
}
Expand All @@ -34,6 +35,7 @@ var mbGetJSONResponse = `
"collect_apps": 0,
"collect_certificates": 1,
"collect_profiles": 2,
"filevault_config": 3,
"created_at": "2022-07-22T01:02:03.444444",
"updated_at": "2022-07-22T01:02:03.444444"
}
Expand All @@ -60,6 +62,7 @@ var mbUpdateJSONResponse = `
"collect_apps": 0,
"collect_certificates": 1,
"collect_profiles": 2,
"filevault_config": 3,
"created_at": "2022-07-22T01:02:03.444444",
"updated_at": "2022-07-22T01:02:03.444444"
}
Expand Down Expand Up @@ -121,6 +124,7 @@ func TestMDMBlueprintsService_GetByID(t *testing.T) {
CollectApps: 0,
CollectCertificates: 1,
CollectProfiles: 2,
FileVaultConfigID: Int(3),
Created: Timestamp{referenceTime},
Updated: Timestamp{referenceTime},
}
Expand Down Expand Up @@ -218,6 +222,7 @@ func TestMDMBlueprintsService_Update(t *testing.T) {
CollectApps: 0,
CollectCertificates: 1,
CollectProfiles: 2,
FileVaultConfigID: Int(3),
}

mux.HandleFunc("/mdm/blueprints/4/", func(w http.ResponseWriter, r *http.Request) {
Expand Down Expand Up @@ -246,6 +251,7 @@ func TestMDMBlueprintsService_Update(t *testing.T) {
CollectApps: 0,
CollectCertificates: 1,
CollectProfiles: 2,
FileVaultConfigID: Int(3),
Created: Timestamp{referenceTime},
Updated: Timestamp{referenceTime},
}
Expand Down
198 changes: 198 additions & 0 deletions mdm_filevault_configs.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,198 @@
package goztl

import (
"context"
"fmt"
"net/http"
)

const mfcBasePath = "mdm/filevault_configs/"

// MDMFileVaultConfigsService is an interface for interfacing with the MDM FileVault configuration
// endpoints of the Zentral API
type MDMFileVaultConfigsService interface {
List(context.Context, *ListOptions) ([]MDMFileVaultConfig, *Response, error)
GetByID(context.Context, int) (*MDMFileVaultConfig, *Response, error)
GetByName(context.Context, string) (*MDMFileVaultConfig, *Response, error)
Create(context.Context, *MDMFileVaultConfigRequest) (*MDMFileVaultConfig, *Response, error)
Update(context.Context, int, *MDMFileVaultConfigRequest) (*MDMFileVaultConfig, *Response, error)
Delete(context.Context, int) (*Response, error)
}

// MDMFileVaultConfigsServiceOp handles communication with the MDM FileVault configurations related
// methods of the Zentral API.
type MDMFileVaultConfigsServiceOp struct {
client *Client
}

var _ MDMFileVaultConfigsService = &MDMFileVaultConfigsServiceOp{}

// MDMFileVaultConfig represents a Zentral MDM FileVault configuration
type MDMFileVaultConfig struct {
ID int `json:"id,omitempty"`
Name string `json:"name"`
EscrowLocationDisplayName string `json:"escrow_location_display_name"`
AtLoginOnly bool `json:"at_login_only"`
BypassAttempts int `json:"bypass_attempts"`
ShowRecoveryKey bool `json:"show_recovery_key"`
DestroyKeyOnStandby bool `json:"destroy_key_on_standby"`
PRKRotationIntervalDays int `json:"prk_rotation_interval_days"`
Created Timestamp `json:"created_at,omitempty"`
Updated Timestamp `json:"updated_at,omitempty"`
}

func (mfc MDMFileVaultConfig) String() string {
return Stringify(mfc)
}

// MDMFileVaultConfigRequest represents a request to create or update a MDM FileVault configuration
type MDMFileVaultConfigRequest struct {
Name string `json:"name"`
EscrowLocationDisplayName string `json:"escrow_location_display_name"`
AtLoginOnly bool `json:"at_login_only"`
BypassAttempts int `json:"bypass_attempts"`
ShowRecoveryKey bool `json:"show_recovery_key"`
DestroyKeyOnStandby bool `json:"destroy_key_on_standby"`
PRKRotationIntervalDays int `json:"prk_rotation_interval_days"`
}

type listMFCOptions struct {
Name string `url:"name,omitempty"`
}

// List lists all the MDM FileVault configurations.
func (s *MDMFileVaultConfigsServiceOp) List(ctx context.Context, opt *ListOptions) ([]MDMFileVaultConfig, *Response, error) {
return s.list(ctx, opt, nil)
}

// GetByID retrieves a MDM FileVault configuration by id.
func (s *MDMFileVaultConfigsServiceOp) GetByID(ctx context.Context, mfcID int) (*MDMFileVaultConfig, *Response, error) {
if mfcID < 1 {
return nil, nil, NewArgError("mfcID", "cannot be less than 1")
}

path := fmt.Sprintf("%s%d/", mfcBasePath, mfcID)

req, err := s.client.NewRequest(ctx, http.MethodGet, path, nil)
if err != nil {
return nil, nil, err
}

mfc := new(MDMFileVaultConfig)

resp, err := s.client.Do(ctx, req, mfc)
if err != nil {
return nil, resp, err
}

return mfc, resp, err
}

// GetByName retrieves a MDM FileVault configuration by name.
func (s *MDMFileVaultConfigsServiceOp) GetByName(ctx context.Context, name string) (*MDMFileVaultConfig, *Response, error) {
if len(name) < 1 {
return nil, nil, NewArgError("name", "cannot be blank")
}

listMFCOpt := &listMFCOptions{Name: name}

mfcs, resp, err := s.list(ctx, nil, listMFCOpt)
if err != nil {
return nil, resp, err
}
if len(mfcs) < 1 {
return nil, resp, nil
}

return &mfcs[0], resp, err
}

// Create a new MDM FileVault configuration.
func (s *MDMFileVaultConfigsServiceOp) Create(ctx context.Context, createRequest *MDMFileVaultConfigRequest) (*MDMFileVaultConfig, *Response, error) {
if createRequest == nil {
return nil, nil, NewArgError("createRequest", "cannot be nil")
}

req, err := s.client.NewRequest(ctx, http.MethodPost, mfcBasePath, createRequest)
if err != nil {
return nil, nil, err
}

mfc := new(MDMFileVaultConfig)
resp, err := s.client.Do(ctx, req, mfc)
if err != nil {
return nil, resp, err
}

return mfc, resp, err
}

// Update a MDM FileVault configuration.
func (s *MDMFileVaultConfigsServiceOp) Update(ctx context.Context, mfcID int, updateRequest *MDMFileVaultConfigRequest) (*MDMFileVaultConfig, *Response, error) {
if mfcID < 1 {
return nil, nil, NewArgError("mfcID", "cannot be less than 1")
}

if updateRequest == nil {
return nil, nil, NewArgError("updateRequest", "cannot be nil")
}

path := fmt.Sprintf("%s%d/", mfcBasePath, mfcID)

req, err := s.client.NewRequest(ctx, http.MethodPut, path, updateRequest)
if err != nil {
return nil, nil, err
}

mfc := new(MDMFileVaultConfig)
resp, err := s.client.Do(ctx, req, mfc)
if err != nil {
return nil, resp, err
}

return mfc, resp, err
}

// Delete a MDM FileVault configuration.
func (s *MDMFileVaultConfigsServiceOp) Delete(ctx context.Context, mfcID int) (*Response, error) {
if mfcID < 1 {
return nil, NewArgError("mfcID", "cannot be less than 1")
}

path := fmt.Sprintf("%s%d/", mfcBasePath, mfcID)

req, err := s.client.NewRequest(ctx, http.MethodDelete, path, nil)
if err != nil {
return nil, err
}

resp, err := s.client.Do(ctx, req, nil)

return resp, err
}

// Helper method for listing MDM FileVault configurations
func (s *MDMFileVaultConfigsServiceOp) list(ctx context.Context, opt *ListOptions, mfcOpt *listMFCOptions) ([]MDMFileVaultConfig, *Response, error) {
path := mfcBasePath
path, err := addOptions(path, opt)
if err != nil {
return nil, nil, err
}
path, err = addOptions(path, mfcOpt)
if err != nil {
return nil, nil, err
}

req, err := s.client.NewRequest(ctx, http.MethodGet, path, nil)
if err != nil {
return nil, nil, err
}

var mfcs []MDMFileVaultConfig
resp, err := s.client.Do(ctx, req, &mfcs)
if err != nil {
return nil, resp, err
}

return mfcs, resp, err
}
Loading

0 comments on commit 5cfcd8b

Please sign in to comment.