github.com/sacloud/iaas-api-go@v1.12.0/internal/define/ssh_key.go (about)

     1  // Copyright 2022-2023 The sacloud/iaas-api-go Authors
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //      http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    14  
    15  package define
    16  
    17  import (
    18  	"net/http"
    19  
    20  	"github.com/sacloud/iaas-api-go/internal/define/names"
    21  	"github.com/sacloud/iaas-api-go/internal/define/ops"
    22  	"github.com/sacloud/iaas-api-go/internal/dsl"
    23  	"github.com/sacloud/iaas-api-go/internal/dsl/meta"
    24  	"github.com/sacloud/iaas-api-go/naked"
    25  )
    26  
    27  const (
    28  	sshKeyAPIName     = "SSHKey"
    29  	sshKeyAPIPathName = "sshkey"
    30  )
    31  
    32  var sshKeyAPI = &dsl.Resource{
    33  	Name:       sshKeyAPIName,
    34  	PathName:   sshKeyAPIPathName,
    35  	PathSuffix: dsl.CloudAPISuffix,
    36  	IsGlobal:   true,
    37  	Operations: dsl.Operations{
    38  		// find
    39  		ops.Find(sshKeyAPIName, sshKeyNakedType, findParameter, sshKeyView),
    40  
    41  		// create
    42  		ops.Create(sshKeyAPIName, sshKeyNakedType, sshKeyCreateParam, sshKeyView),
    43  
    44  		// generate
    45  		{
    46  			ResourceName: sshKeyAPIName,
    47  			Name:         "Generate",
    48  			PathFormat:   dsl.DefaultPathFormat + "/generate",
    49  			Method:       http.MethodPost,
    50  			RequestEnvelope: dsl.RequestEnvelope(&dsl.EnvelopePayloadDesc{
    51  				Type: sshKeyNakedType,
    52  				Name: sshKeyAPIName,
    53  			}),
    54  			Arguments: dsl.Arguments{
    55  				dsl.MappableArgument("param", sshKeyGenerateParam, sshKeyAPIName),
    56  			},
    57  			ResponseEnvelope: dsl.ResponseEnvelope(&dsl.EnvelopePayloadDesc{
    58  				Type: sshKeyNakedType,
    59  				Name: sshKeyAPIName,
    60  			}),
    61  			Results: dsl.Results{
    62  				{
    63  					SourceField: sshKeyAPIName,
    64  					DestField:   sshKeyGeneratedView.Name,
    65  					IsPlural:    false,
    66  					Model:       sshKeyGeneratedView,
    67  				},
    68  			},
    69  		},
    70  
    71  		// read
    72  		ops.Read(sshKeyAPIName, sshKeyNakedType, sshKeyView),
    73  
    74  		// update
    75  		ops.Update(sshKeyAPIName, sshKeyNakedType, sshKeyUpdateParam, sshKeyView),
    76  
    77  		// delete
    78  		ops.Delete(sshKeyAPIName),
    79  	},
    80  }
    81  
    82  var (
    83  	sshKeyNakedType = meta.Static(naked.SSHKey{})
    84  
    85  	sshKeyFields = []*dsl.FieldDesc{
    86  		fields.ID(),
    87  		fields.Name(),
    88  		fields.Description(),
    89  		fields.CreatedAt(),
    90  		fields.PublicKey(),
    91  		fields.Fingerprint(),
    92  	}
    93  
    94  	sshKeyView = &dsl.Model{
    95  		Name:      sshKeyAPIName,
    96  		NakedType: sshKeyNakedType,
    97  		Fields:    sshKeyFields,
    98  	}
    99  
   100  	sshKeyGeneratedView = &dsl.Model{
   101  		Name:      sshKeyAPIName + "Generated",
   102  		NakedType: sshKeyNakedType,
   103  		Fields:    append(sshKeyFields, fields.PrivateKey()),
   104  	}
   105  
   106  	sshKeyCreateParam = &dsl.Model{
   107  		Name:      names.CreateParameterName(sshKeyAPIName),
   108  		NakedType: sshKeyNakedType,
   109  		Fields: []*dsl.FieldDesc{
   110  			fields.Name(),
   111  			fields.Description(),
   112  			fields.PublicKey(),
   113  		},
   114  	}
   115  
   116  	sshKeyGenerateParam = &dsl.Model{
   117  		Name:      names.RequestParameterName(sshKeyAPIName, "Generate"),
   118  		NakedType: sshKeyNakedType,
   119  		Fields: []*dsl.FieldDesc{
   120  			fields.Name(),
   121  			fields.Description(),
   122  			fields.PassPhrase(),
   123  		},
   124  		ConstFields: []*dsl.ConstFieldDesc{
   125  			{
   126  				Name:  "GenerateFormat",
   127  				Type:  meta.TypeString,
   128  				Value: `"openssh"`,
   129  			},
   130  		},
   131  	}
   132  
   133  	sshKeyUpdateParam = &dsl.Model{
   134  		Name:      names.UpdateParameterName(sshKeyAPIName),
   135  		NakedType: sshKeyNakedType,
   136  		Fields: []*dsl.FieldDesc{
   137  			fields.Name(),
   138  			fields.Description(),
   139  		},
   140  	}
   141  )