1// Copyright 2021 Google LLC. 2// Use of this source code is governed by a BSD-style 3// license that can be found in the LICENSE file. 4 5// Code generated file. DO NOT EDIT. 6 7// Package oslogin provides access to the Cloud OS Login API. 8// 9// This package is DEPRECATED. Use package cloud.google.com/go/oslogin/apiv1 instead. 10// 11// For product documentation, see: https://cloud.google.com/compute/docs/oslogin/ 12// 13// Creating a client 14// 15// Usage example: 16// 17// import "google.golang.org/api/oslogin/v1" 18// ... 19// ctx := context.Background() 20// osloginService, err := oslogin.NewService(ctx) 21// 22// In this example, Google Application Default Credentials are used for authentication. 23// 24// For information on how to create and obtain Application Default Credentials, see https://developers.google.com/identity/protocols/application-default-credentials. 25// 26// Other authentication options 27// 28// By default, all available scopes (see "Constants") are used to authenticate. To restrict scopes, use option.WithScopes: 29// 30// osloginService, err := oslogin.NewService(ctx, option.WithScopes(oslogin.ComputeScope)) 31// 32// To use an API key for authentication (note: some APIs do not support API keys), use option.WithAPIKey: 33// 34// osloginService, err := oslogin.NewService(ctx, option.WithAPIKey("AIza...")) 35// 36// To use an OAuth token (e.g., a user token obtained via a three-legged OAuth flow), use option.WithTokenSource: 37// 38// config := &oauth2.Config{...} 39// // ... 40// token, err := config.Exchange(ctx, ...) 41// osloginService, err := oslogin.NewService(ctx, option.WithTokenSource(config.TokenSource(ctx, token))) 42// 43// See https://godoc.org/google.golang.org/api/option/ for details on options. 44package oslogin // import "google.golang.org/api/oslogin/v1" 45 46import ( 47 "bytes" 48 "context" 49 "encoding/json" 50 "errors" 51 "fmt" 52 "io" 53 "net/http" 54 "net/url" 55 "strconv" 56 "strings" 57 58 googleapi "google.golang.org/api/googleapi" 59 gensupport "google.golang.org/api/internal/gensupport" 60 option "google.golang.org/api/option" 61 internaloption "google.golang.org/api/option/internaloption" 62 htransport "google.golang.org/api/transport/http" 63) 64 65// Always reference these packages, just in case the auto-generated code 66// below doesn't. 67var _ = bytes.NewBuffer 68var _ = strconv.Itoa 69var _ = fmt.Sprintf 70var _ = json.NewDecoder 71var _ = io.Copy 72var _ = url.Parse 73var _ = gensupport.MarshalJSON 74var _ = googleapi.Version 75var _ = errors.New 76var _ = strings.Replace 77var _ = context.Canceled 78var _ = internaloption.WithDefaultEndpoint 79 80const apiId = "oslogin:v1" 81const apiName = "oslogin" 82const apiVersion = "v1" 83const basePath = "https://oslogin.googleapis.com/" 84const mtlsBasePath = "https://oslogin.mtls.googleapis.com/" 85 86// OAuth2 scopes used by this API. 87const ( 88 // See, edit, configure, and delete your Google Cloud Platform data 89 CloudPlatformScope = "https://www.googleapis.com/auth/cloud-platform" 90 91 // View and manage your Google Compute Engine resources 92 ComputeScope = "https://www.googleapis.com/auth/compute" 93) 94 95// NewService creates a new Service. 96func NewService(ctx context.Context, opts ...option.ClientOption) (*Service, error) { 97 scopesOption := option.WithScopes( 98 "https://www.googleapis.com/auth/cloud-platform", 99 "https://www.googleapis.com/auth/compute", 100 ) 101 // NOTE: prepend, so we don't override user-specified scopes. 102 opts = append([]option.ClientOption{scopesOption}, opts...) 103 opts = append(opts, internaloption.WithDefaultEndpoint(basePath)) 104 opts = append(opts, internaloption.WithDefaultMTLSEndpoint(mtlsBasePath)) 105 client, endpoint, err := htransport.NewClient(ctx, opts...) 106 if err != nil { 107 return nil, err 108 } 109 s, err := New(client) 110 if err != nil { 111 return nil, err 112 } 113 if endpoint != "" { 114 s.BasePath = endpoint 115 } 116 return s, nil 117} 118 119// New creates a new Service. It uses the provided http.Client for requests. 120// 121// Deprecated: please use NewService instead. 122// To provide a custom HTTP client, use option.WithHTTPClient. 123// If you are using google.golang.org/api/googleapis/transport.APIKey, use option.WithAPIKey with NewService instead. 124func New(client *http.Client) (*Service, error) { 125 if client == nil { 126 return nil, errors.New("client is nil") 127 } 128 s := &Service{client: client, BasePath: basePath} 129 s.Users = NewUsersService(s) 130 return s, nil 131} 132 133type Service struct { 134 client *http.Client 135 BasePath string // API endpoint base URL 136 UserAgent string // optional additional User-Agent fragment 137 138 Users *UsersService 139} 140 141func (s *Service) userAgent() string { 142 if s.UserAgent == "" { 143 return googleapi.UserAgent 144 } 145 return googleapi.UserAgent + " " + s.UserAgent 146} 147 148func NewUsersService(s *Service) *UsersService { 149 rs := &UsersService{s: s} 150 rs.Projects = NewUsersProjectsService(s) 151 rs.SshPublicKeys = NewUsersSshPublicKeysService(s) 152 return rs 153} 154 155type UsersService struct { 156 s *Service 157 158 Projects *UsersProjectsService 159 160 SshPublicKeys *UsersSshPublicKeysService 161} 162 163func NewUsersProjectsService(s *Service) *UsersProjectsService { 164 rs := &UsersProjectsService{s: s} 165 return rs 166} 167 168type UsersProjectsService struct { 169 s *Service 170} 171 172func NewUsersSshPublicKeysService(s *Service) *UsersSshPublicKeysService { 173 rs := &UsersSshPublicKeysService{s: s} 174 return rs 175} 176 177type UsersSshPublicKeysService struct { 178 s *Service 179} 180 181// Empty: A generic empty message that you can re-use to avoid defining 182// duplicated empty messages in your APIs. A typical example is to use 183// it as the request or the response type of an API method. For 184// instance: service Foo { rpc Bar(google.protobuf.Empty) returns 185// (google.protobuf.Empty); } The JSON representation for `Empty` is 186// empty JSON object `{}`. 187type Empty struct { 188 // ServerResponse contains the HTTP response code and headers from the 189 // server. 190 googleapi.ServerResponse `json:"-"` 191} 192 193// ImportSshPublicKeyResponse: A response message for importing an SSH 194// public key. 195type ImportSshPublicKeyResponse struct { 196 // Details: Detailed information about import results. 197 Details string `json:"details,omitempty"` 198 199 // LoginProfile: The login profile information for the user. 200 LoginProfile *LoginProfile `json:"loginProfile,omitempty"` 201 202 // ServerResponse contains the HTTP response code and headers from the 203 // server. 204 googleapi.ServerResponse `json:"-"` 205 206 // ForceSendFields is a list of field names (e.g. "Details") to 207 // unconditionally include in API requests. By default, fields with 208 // empty or default values are omitted from API requests. However, any 209 // non-pointer, non-interface field appearing in ForceSendFields will be 210 // sent to the server regardless of whether the field is empty or not. 211 // This may be used to include empty fields in Patch requests. 212 ForceSendFields []string `json:"-"` 213 214 // NullFields is a list of field names (e.g. "Details") to include in 215 // API requests with the JSON null value. By default, fields with empty 216 // values are omitted from API requests. However, any field with an 217 // empty value appearing in NullFields will be sent to the server as 218 // null. It is an error if a field in this list has a non-empty value. 219 // This may be used to include null fields in Patch requests. 220 NullFields []string `json:"-"` 221} 222 223func (s *ImportSshPublicKeyResponse) MarshalJSON() ([]byte, error) { 224 type NoMethod ImportSshPublicKeyResponse 225 raw := NoMethod(*s) 226 return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) 227} 228 229// LoginProfile: The user profile information used for logging in to a 230// virtual machine on Google Compute Engine. 231type LoginProfile struct { 232 // Name: Required. A unique user ID. 233 Name string `json:"name,omitempty"` 234 235 // PosixAccounts: The list of POSIX accounts associated with the user. 236 PosixAccounts []*PosixAccount `json:"posixAccounts,omitempty"` 237 238 // SshPublicKeys: A map from SSH public key fingerprint to the 239 // associated key object. 240 SshPublicKeys map[string]SshPublicKey `json:"sshPublicKeys,omitempty"` 241 242 // ServerResponse contains the HTTP response code and headers from the 243 // server. 244 googleapi.ServerResponse `json:"-"` 245 246 // ForceSendFields is a list of field names (e.g. "Name") to 247 // unconditionally include in API requests. By default, fields with 248 // empty or default values are omitted from API requests. However, any 249 // non-pointer, non-interface field appearing in ForceSendFields will be 250 // sent to the server regardless of whether the field is empty or not. 251 // This may be used to include empty fields in Patch requests. 252 ForceSendFields []string `json:"-"` 253 254 // NullFields is a list of field names (e.g. "Name") to include in API 255 // requests with the JSON null value. By default, fields with empty 256 // values are omitted from API requests. However, any field with an 257 // empty value appearing in NullFields will be sent to the server as 258 // null. It is an error if a field in this list has a non-empty value. 259 // This may be used to include null fields in Patch requests. 260 NullFields []string `json:"-"` 261} 262 263func (s *LoginProfile) MarshalJSON() ([]byte, error) { 264 type NoMethod LoginProfile 265 raw := NoMethod(*s) 266 return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) 267} 268 269// PosixAccount: The POSIX account information associated with a Google 270// account. 271type PosixAccount struct { 272 // AccountId: Output only. A POSIX account identifier. 273 AccountId string `json:"accountId,omitempty"` 274 275 // Gecos: The GECOS (user information) entry for this account. 276 Gecos string `json:"gecos,omitempty"` 277 278 // Gid: The default group ID. 279 Gid int64 `json:"gid,omitempty,string"` 280 281 // HomeDirectory: The path to the home directory for this account. 282 HomeDirectory string `json:"homeDirectory,omitempty"` 283 284 // Name: Output only. The canonical resource name. 285 Name string `json:"name,omitempty"` 286 287 // OperatingSystemType: The operating system type where this account 288 // applies. 289 // 290 // Possible values: 291 // "OPERATING_SYSTEM_TYPE_UNSPECIFIED" - The operating system type 292 // associated with the user account information is unspecified. 293 // "LINUX" - Linux user account information. 294 // "WINDOWS" - Windows user account information. 295 OperatingSystemType string `json:"operatingSystemType,omitempty"` 296 297 // Primary: Only one POSIX account can be marked as primary. 298 Primary bool `json:"primary,omitempty"` 299 300 // Shell: The path to the logic shell for this account. 301 Shell string `json:"shell,omitempty"` 302 303 // SystemId: System identifier for which account the username or uid 304 // applies to. By default, the empty value is used. 305 SystemId string `json:"systemId,omitempty"` 306 307 // Uid: The user ID. 308 Uid int64 `json:"uid,omitempty,string"` 309 310 // Username: The username of the POSIX account. 311 Username string `json:"username,omitempty"` 312 313 // ForceSendFields is a list of field names (e.g. "AccountId") to 314 // unconditionally include in API requests. By default, fields with 315 // empty or default values are omitted from API requests. However, any 316 // non-pointer, non-interface field appearing in ForceSendFields will be 317 // sent to the server regardless of whether the field is empty or not. 318 // This may be used to include empty fields in Patch requests. 319 ForceSendFields []string `json:"-"` 320 321 // NullFields is a list of field names (e.g. "AccountId") to include in 322 // API requests with the JSON null value. By default, fields with empty 323 // values are omitted from API requests. However, any field with an 324 // empty value appearing in NullFields will be sent to the server as 325 // null. It is an error if a field in this list has a non-empty value. 326 // This may be used to include null fields in Patch requests. 327 NullFields []string `json:"-"` 328} 329 330func (s *PosixAccount) MarshalJSON() ([]byte, error) { 331 type NoMethod PosixAccount 332 raw := NoMethod(*s) 333 return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) 334} 335 336// SshPublicKey: The SSH public key information associated with a Google 337// account. 338type SshPublicKey struct { 339 // ExpirationTimeUsec: An expiration time in microseconds since epoch. 340 ExpirationTimeUsec int64 `json:"expirationTimeUsec,omitempty,string"` 341 342 // Fingerprint: Output only. The SHA-256 fingerprint of the SSH public 343 // key. 344 Fingerprint string `json:"fingerprint,omitempty"` 345 346 // Key: Public key text in SSH format, defined by RFC4253 section 6.6. 347 Key string `json:"key,omitempty"` 348 349 // Name: Output only. The canonical resource name. 350 Name string `json:"name,omitempty"` 351 352 // ServerResponse contains the HTTP response code and headers from the 353 // server. 354 googleapi.ServerResponse `json:"-"` 355 356 // ForceSendFields is a list of field names (e.g. "ExpirationTimeUsec") 357 // to unconditionally include in API requests. By default, fields with 358 // empty or default values are omitted from API requests. However, any 359 // non-pointer, non-interface field appearing in ForceSendFields will be 360 // sent to the server regardless of whether the field is empty or not. 361 // This may be used to include empty fields in Patch requests. 362 ForceSendFields []string `json:"-"` 363 364 // NullFields is a list of field names (e.g. "ExpirationTimeUsec") to 365 // include in API requests with the JSON null value. By default, fields 366 // with empty values are omitted from API requests. However, any field 367 // with an empty value appearing in NullFields will be sent to the 368 // server as null. It is an error if a field in this list has a 369 // non-empty value. This may be used to include null fields in Patch 370 // requests. 371 NullFields []string `json:"-"` 372} 373 374func (s *SshPublicKey) MarshalJSON() ([]byte, error) { 375 type NoMethod SshPublicKey 376 raw := NoMethod(*s) 377 return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) 378} 379 380// method id "oslogin.users.getLoginProfile": 381 382type UsersGetLoginProfileCall struct { 383 s *Service 384 name string 385 urlParams_ gensupport.URLParams 386 ifNoneMatch_ string 387 ctx_ context.Context 388 header_ http.Header 389} 390 391// GetLoginProfile: Retrieves the profile information used for logging 392// in to a virtual machine on Google Compute Engine. 393// 394// - name: The unique ID for the user in format `users/{user}`. 395func (r *UsersService) GetLoginProfile(name string) *UsersGetLoginProfileCall { 396 c := &UsersGetLoginProfileCall{s: r.s, urlParams_: make(gensupport.URLParams)} 397 c.name = name 398 return c 399} 400 401// ProjectId sets the optional parameter "projectId": The project ID of 402// the Google Cloud Platform project. 403func (c *UsersGetLoginProfileCall) ProjectId(projectId string) *UsersGetLoginProfileCall { 404 c.urlParams_.Set("projectId", projectId) 405 return c 406} 407 408// SystemId sets the optional parameter "systemId": A system ID for 409// filtering the results of the request. 410func (c *UsersGetLoginProfileCall) SystemId(systemId string) *UsersGetLoginProfileCall { 411 c.urlParams_.Set("systemId", systemId) 412 return c 413} 414 415// Fields allows partial responses to be retrieved. See 416// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse 417// for more information. 418func (c *UsersGetLoginProfileCall) Fields(s ...googleapi.Field) *UsersGetLoginProfileCall { 419 c.urlParams_.Set("fields", googleapi.CombineFields(s)) 420 return c 421} 422 423// IfNoneMatch sets the optional parameter which makes the operation 424// fail if the object's ETag matches the given value. This is useful for 425// getting updates only after the object has changed since the last 426// request. Use googleapi.IsNotModified to check whether the response 427// error from Do is the result of In-None-Match. 428func (c *UsersGetLoginProfileCall) IfNoneMatch(entityTag string) *UsersGetLoginProfileCall { 429 c.ifNoneMatch_ = entityTag 430 return c 431} 432 433// Context sets the context to be used in this call's Do method. Any 434// pending HTTP request will be aborted if the provided context is 435// canceled. 436func (c *UsersGetLoginProfileCall) Context(ctx context.Context) *UsersGetLoginProfileCall { 437 c.ctx_ = ctx 438 return c 439} 440 441// Header returns an http.Header that can be modified by the caller to 442// add HTTP headers to the request. 443func (c *UsersGetLoginProfileCall) Header() http.Header { 444 if c.header_ == nil { 445 c.header_ = make(http.Header) 446 } 447 return c.header_ 448} 449 450func (c *UsersGetLoginProfileCall) doRequest(alt string) (*http.Response, error) { 451 reqHeaders := make(http.Header) 452 reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/20210812") 453 for k, v := range c.header_ { 454 reqHeaders[k] = v 455 } 456 reqHeaders.Set("User-Agent", c.s.userAgent()) 457 if c.ifNoneMatch_ != "" { 458 reqHeaders.Set("If-None-Match", c.ifNoneMatch_) 459 } 460 var body io.Reader = nil 461 c.urlParams_.Set("alt", alt) 462 c.urlParams_.Set("prettyPrint", "false") 463 urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}/loginProfile") 464 urls += "?" + c.urlParams_.Encode() 465 req, err := http.NewRequest("GET", urls, body) 466 if err != nil { 467 return nil, err 468 } 469 req.Header = reqHeaders 470 googleapi.Expand(req.URL, map[string]string{ 471 "name": c.name, 472 }) 473 return gensupport.SendRequest(c.ctx_, c.s.client, req) 474} 475 476// Do executes the "oslogin.users.getLoginProfile" call. 477// Exactly one of *LoginProfile or error will be non-nil. Any non-2xx 478// status code is an error. Response headers are in either 479// *LoginProfile.ServerResponse.Header or (if a response was returned at 480// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified 481// to check whether the returned error was because 482// http.StatusNotModified was returned. 483func (c *UsersGetLoginProfileCall) Do(opts ...googleapi.CallOption) (*LoginProfile, error) { 484 gensupport.SetOptions(c.urlParams_, opts...) 485 res, err := c.doRequest("json") 486 if res != nil && res.StatusCode == http.StatusNotModified { 487 if res.Body != nil { 488 res.Body.Close() 489 } 490 return nil, &googleapi.Error{ 491 Code: res.StatusCode, 492 Header: res.Header, 493 } 494 } 495 if err != nil { 496 return nil, err 497 } 498 defer googleapi.CloseBody(res) 499 if err := googleapi.CheckResponse(res); err != nil { 500 return nil, err 501 } 502 ret := &LoginProfile{ 503 ServerResponse: googleapi.ServerResponse{ 504 Header: res.Header, 505 HTTPStatusCode: res.StatusCode, 506 }, 507 } 508 target := &ret 509 if err := gensupport.DecodeResponse(target, res); err != nil { 510 return nil, err 511 } 512 return ret, nil 513 // { 514 // "description": "Retrieves the profile information used for logging in to a virtual machine on Google Compute Engine.", 515 // "flatPath": "v1/users/{usersId}/loginProfile", 516 // "httpMethod": "GET", 517 // "id": "oslogin.users.getLoginProfile", 518 // "parameterOrder": [ 519 // "name" 520 // ], 521 // "parameters": { 522 // "name": { 523 // "description": "Required. The unique ID for the user in format `users/{user}`.", 524 // "location": "path", 525 // "pattern": "^users/[^/]+$", 526 // "required": true, 527 // "type": "string" 528 // }, 529 // "projectId": { 530 // "description": "The project ID of the Google Cloud Platform project.", 531 // "location": "query", 532 // "type": "string" 533 // }, 534 // "systemId": { 535 // "description": "A system ID for filtering the results of the request.", 536 // "location": "query", 537 // "type": "string" 538 // } 539 // }, 540 // "path": "v1/{+name}/loginProfile", 541 // "response": { 542 // "$ref": "LoginProfile" 543 // }, 544 // "scopes": [ 545 // "https://www.googleapis.com/auth/cloud-platform", 546 // "https://www.googleapis.com/auth/compute" 547 // ] 548 // } 549 550} 551 552// method id "oslogin.users.importSshPublicKey": 553 554type UsersImportSshPublicKeyCall struct { 555 s *Service 556 parent string 557 sshpublickey *SshPublicKey 558 urlParams_ gensupport.URLParams 559 ctx_ context.Context 560 header_ http.Header 561} 562 563// ImportSshPublicKey: Adds an SSH public key and returns the profile 564// information. Default POSIX account information is set when no 565// username and UID exist as part of the login profile. 566// 567// - parent: The unique ID for the user in format `users/{user}`. 568func (r *UsersService) ImportSshPublicKey(parent string, sshpublickey *SshPublicKey) *UsersImportSshPublicKeyCall { 569 c := &UsersImportSshPublicKeyCall{s: r.s, urlParams_: make(gensupport.URLParams)} 570 c.parent = parent 571 c.sshpublickey = sshpublickey 572 return c 573} 574 575// ProjectId sets the optional parameter "projectId": The project ID of 576// the Google Cloud Platform project. 577func (c *UsersImportSshPublicKeyCall) ProjectId(projectId string) *UsersImportSshPublicKeyCall { 578 c.urlParams_.Set("projectId", projectId) 579 return c 580} 581 582// Fields allows partial responses to be retrieved. See 583// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse 584// for more information. 585func (c *UsersImportSshPublicKeyCall) Fields(s ...googleapi.Field) *UsersImportSshPublicKeyCall { 586 c.urlParams_.Set("fields", googleapi.CombineFields(s)) 587 return c 588} 589 590// Context sets the context to be used in this call's Do method. Any 591// pending HTTP request will be aborted if the provided context is 592// canceled. 593func (c *UsersImportSshPublicKeyCall) Context(ctx context.Context) *UsersImportSshPublicKeyCall { 594 c.ctx_ = ctx 595 return c 596} 597 598// Header returns an http.Header that can be modified by the caller to 599// add HTTP headers to the request. 600func (c *UsersImportSshPublicKeyCall) Header() http.Header { 601 if c.header_ == nil { 602 c.header_ = make(http.Header) 603 } 604 return c.header_ 605} 606 607func (c *UsersImportSshPublicKeyCall) doRequest(alt string) (*http.Response, error) { 608 reqHeaders := make(http.Header) 609 reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/20210812") 610 for k, v := range c.header_ { 611 reqHeaders[k] = v 612 } 613 reqHeaders.Set("User-Agent", c.s.userAgent()) 614 var body io.Reader = nil 615 body, err := googleapi.WithoutDataWrapper.JSONReader(c.sshpublickey) 616 if err != nil { 617 return nil, err 618 } 619 reqHeaders.Set("Content-Type", "application/json") 620 c.urlParams_.Set("alt", alt) 621 c.urlParams_.Set("prettyPrint", "false") 622 urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+parent}:importSshPublicKey") 623 urls += "?" + c.urlParams_.Encode() 624 req, err := http.NewRequest("POST", urls, body) 625 if err != nil { 626 return nil, err 627 } 628 req.Header = reqHeaders 629 googleapi.Expand(req.URL, map[string]string{ 630 "parent": c.parent, 631 }) 632 return gensupport.SendRequest(c.ctx_, c.s.client, req) 633} 634 635// Do executes the "oslogin.users.importSshPublicKey" call. 636// Exactly one of *ImportSshPublicKeyResponse or error will be non-nil. 637// Any non-2xx status code is an error. Response headers are in either 638// *ImportSshPublicKeyResponse.ServerResponse.Header or (if a response 639// was returned at all) in error.(*googleapi.Error).Header. Use 640// googleapi.IsNotModified to check whether the returned error was 641// because http.StatusNotModified was returned. 642func (c *UsersImportSshPublicKeyCall) Do(opts ...googleapi.CallOption) (*ImportSshPublicKeyResponse, error) { 643 gensupport.SetOptions(c.urlParams_, opts...) 644 res, err := c.doRequest("json") 645 if res != nil && res.StatusCode == http.StatusNotModified { 646 if res.Body != nil { 647 res.Body.Close() 648 } 649 return nil, &googleapi.Error{ 650 Code: res.StatusCode, 651 Header: res.Header, 652 } 653 } 654 if err != nil { 655 return nil, err 656 } 657 defer googleapi.CloseBody(res) 658 if err := googleapi.CheckResponse(res); err != nil { 659 return nil, err 660 } 661 ret := &ImportSshPublicKeyResponse{ 662 ServerResponse: googleapi.ServerResponse{ 663 Header: res.Header, 664 HTTPStatusCode: res.StatusCode, 665 }, 666 } 667 target := &ret 668 if err := gensupport.DecodeResponse(target, res); err != nil { 669 return nil, err 670 } 671 return ret, nil 672 // { 673 // "description": "Adds an SSH public key and returns the profile information. Default POSIX account information is set when no username and UID exist as part of the login profile.", 674 // "flatPath": "v1/users/{usersId}:importSshPublicKey", 675 // "httpMethod": "POST", 676 // "id": "oslogin.users.importSshPublicKey", 677 // "parameterOrder": [ 678 // "parent" 679 // ], 680 // "parameters": { 681 // "parent": { 682 // "description": "Required. The unique ID for the user in format `users/{user}`.", 683 // "location": "path", 684 // "pattern": "^users/[^/]+$", 685 // "required": true, 686 // "type": "string" 687 // }, 688 // "projectId": { 689 // "description": "The project ID of the Google Cloud Platform project.", 690 // "location": "query", 691 // "type": "string" 692 // } 693 // }, 694 // "path": "v1/{+parent}:importSshPublicKey", 695 // "request": { 696 // "$ref": "SshPublicKey" 697 // }, 698 // "response": { 699 // "$ref": "ImportSshPublicKeyResponse" 700 // }, 701 // "scopes": [ 702 // "https://www.googleapis.com/auth/cloud-platform", 703 // "https://www.googleapis.com/auth/compute" 704 // ] 705 // } 706 707} 708 709// method id "oslogin.users.projects.delete": 710 711type UsersProjectsDeleteCall struct { 712 s *Service 713 name string 714 urlParams_ gensupport.URLParams 715 ctx_ context.Context 716 header_ http.Header 717} 718 719// Delete: Deletes a POSIX account. 720// 721// - name: A reference to the POSIX account to update. POSIX accounts 722// are identified by the project ID they are associated with. A 723// reference to the POSIX account is in format 724// `users/{user}/projects/{project}`. 725func (r *UsersProjectsService) Delete(name string) *UsersProjectsDeleteCall { 726 c := &UsersProjectsDeleteCall{s: r.s, urlParams_: make(gensupport.URLParams)} 727 c.name = name 728 return c 729} 730 731// Fields allows partial responses to be retrieved. See 732// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse 733// for more information. 734func (c *UsersProjectsDeleteCall) Fields(s ...googleapi.Field) *UsersProjectsDeleteCall { 735 c.urlParams_.Set("fields", googleapi.CombineFields(s)) 736 return c 737} 738 739// Context sets the context to be used in this call's Do method. Any 740// pending HTTP request will be aborted if the provided context is 741// canceled. 742func (c *UsersProjectsDeleteCall) Context(ctx context.Context) *UsersProjectsDeleteCall { 743 c.ctx_ = ctx 744 return c 745} 746 747// Header returns an http.Header that can be modified by the caller to 748// add HTTP headers to the request. 749func (c *UsersProjectsDeleteCall) Header() http.Header { 750 if c.header_ == nil { 751 c.header_ = make(http.Header) 752 } 753 return c.header_ 754} 755 756func (c *UsersProjectsDeleteCall) doRequest(alt string) (*http.Response, error) { 757 reqHeaders := make(http.Header) 758 reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/20210812") 759 for k, v := range c.header_ { 760 reqHeaders[k] = v 761 } 762 reqHeaders.Set("User-Agent", c.s.userAgent()) 763 var body io.Reader = nil 764 c.urlParams_.Set("alt", alt) 765 c.urlParams_.Set("prettyPrint", "false") 766 urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}") 767 urls += "?" + c.urlParams_.Encode() 768 req, err := http.NewRequest("DELETE", urls, body) 769 if err != nil { 770 return nil, err 771 } 772 req.Header = reqHeaders 773 googleapi.Expand(req.URL, map[string]string{ 774 "name": c.name, 775 }) 776 return gensupport.SendRequest(c.ctx_, c.s.client, req) 777} 778 779// Do executes the "oslogin.users.projects.delete" call. 780// Exactly one of *Empty or error will be non-nil. Any non-2xx status 781// code is an error. Response headers are in either 782// *Empty.ServerResponse.Header or (if a response was returned at all) 783// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to 784// check whether the returned error was because http.StatusNotModified 785// was returned. 786func (c *UsersProjectsDeleteCall) Do(opts ...googleapi.CallOption) (*Empty, error) { 787 gensupport.SetOptions(c.urlParams_, opts...) 788 res, err := c.doRequest("json") 789 if res != nil && res.StatusCode == http.StatusNotModified { 790 if res.Body != nil { 791 res.Body.Close() 792 } 793 return nil, &googleapi.Error{ 794 Code: res.StatusCode, 795 Header: res.Header, 796 } 797 } 798 if err != nil { 799 return nil, err 800 } 801 defer googleapi.CloseBody(res) 802 if err := googleapi.CheckResponse(res); err != nil { 803 return nil, err 804 } 805 ret := &Empty{ 806 ServerResponse: googleapi.ServerResponse{ 807 Header: res.Header, 808 HTTPStatusCode: res.StatusCode, 809 }, 810 } 811 target := &ret 812 if err := gensupport.DecodeResponse(target, res); err != nil { 813 return nil, err 814 } 815 return ret, nil 816 // { 817 // "description": "Deletes a POSIX account.", 818 // "flatPath": "v1/users/{usersId}/projects/{projectsId}", 819 // "httpMethod": "DELETE", 820 // "id": "oslogin.users.projects.delete", 821 // "parameterOrder": [ 822 // "name" 823 // ], 824 // "parameters": { 825 // "name": { 826 // "description": "Required. A reference to the POSIX account to update. POSIX accounts are identified by the project ID they are associated with. A reference to the POSIX account is in format `users/{user}/projects/{project}`.", 827 // "location": "path", 828 // "pattern": "^users/[^/]+/projects/[^/]+$", 829 // "required": true, 830 // "type": "string" 831 // } 832 // }, 833 // "path": "v1/{+name}", 834 // "response": { 835 // "$ref": "Empty" 836 // }, 837 // "scopes": [ 838 // "https://www.googleapis.com/auth/cloud-platform", 839 // "https://www.googleapis.com/auth/compute" 840 // ] 841 // } 842 843} 844 845// method id "oslogin.users.sshPublicKeys.delete": 846 847type UsersSshPublicKeysDeleteCall struct { 848 s *Service 849 name string 850 urlParams_ gensupport.URLParams 851 ctx_ context.Context 852 header_ http.Header 853} 854 855// Delete: Deletes an SSH public key. 856// 857// - name: The fingerprint of the public key to update. Public keys are 858// identified by their SHA-256 fingerprint. The fingerprint of the 859// public key is in format `users/{user}/sshPublicKeys/{fingerprint}`. 860func (r *UsersSshPublicKeysService) Delete(name string) *UsersSshPublicKeysDeleteCall { 861 c := &UsersSshPublicKeysDeleteCall{s: r.s, urlParams_: make(gensupport.URLParams)} 862 c.name = name 863 return c 864} 865 866// Fields allows partial responses to be retrieved. See 867// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse 868// for more information. 869func (c *UsersSshPublicKeysDeleteCall) Fields(s ...googleapi.Field) *UsersSshPublicKeysDeleteCall { 870 c.urlParams_.Set("fields", googleapi.CombineFields(s)) 871 return c 872} 873 874// Context sets the context to be used in this call's Do method. Any 875// pending HTTP request will be aborted if the provided context is 876// canceled. 877func (c *UsersSshPublicKeysDeleteCall) Context(ctx context.Context) *UsersSshPublicKeysDeleteCall { 878 c.ctx_ = ctx 879 return c 880} 881 882// Header returns an http.Header that can be modified by the caller to 883// add HTTP headers to the request. 884func (c *UsersSshPublicKeysDeleteCall) Header() http.Header { 885 if c.header_ == nil { 886 c.header_ = make(http.Header) 887 } 888 return c.header_ 889} 890 891func (c *UsersSshPublicKeysDeleteCall) doRequest(alt string) (*http.Response, error) { 892 reqHeaders := make(http.Header) 893 reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/20210812") 894 for k, v := range c.header_ { 895 reqHeaders[k] = v 896 } 897 reqHeaders.Set("User-Agent", c.s.userAgent()) 898 var body io.Reader = nil 899 c.urlParams_.Set("alt", alt) 900 c.urlParams_.Set("prettyPrint", "false") 901 urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}") 902 urls += "?" + c.urlParams_.Encode() 903 req, err := http.NewRequest("DELETE", urls, body) 904 if err != nil { 905 return nil, err 906 } 907 req.Header = reqHeaders 908 googleapi.Expand(req.URL, map[string]string{ 909 "name": c.name, 910 }) 911 return gensupport.SendRequest(c.ctx_, c.s.client, req) 912} 913 914// Do executes the "oslogin.users.sshPublicKeys.delete" call. 915// Exactly one of *Empty or error will be non-nil. Any non-2xx status 916// code is an error. Response headers are in either 917// *Empty.ServerResponse.Header or (if a response was returned at all) 918// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to 919// check whether the returned error was because http.StatusNotModified 920// was returned. 921func (c *UsersSshPublicKeysDeleteCall) Do(opts ...googleapi.CallOption) (*Empty, error) { 922 gensupport.SetOptions(c.urlParams_, opts...) 923 res, err := c.doRequest("json") 924 if res != nil && res.StatusCode == http.StatusNotModified { 925 if res.Body != nil { 926 res.Body.Close() 927 } 928 return nil, &googleapi.Error{ 929 Code: res.StatusCode, 930 Header: res.Header, 931 } 932 } 933 if err != nil { 934 return nil, err 935 } 936 defer googleapi.CloseBody(res) 937 if err := googleapi.CheckResponse(res); err != nil { 938 return nil, err 939 } 940 ret := &Empty{ 941 ServerResponse: googleapi.ServerResponse{ 942 Header: res.Header, 943 HTTPStatusCode: res.StatusCode, 944 }, 945 } 946 target := &ret 947 if err := gensupport.DecodeResponse(target, res); err != nil { 948 return nil, err 949 } 950 return ret, nil 951 // { 952 // "description": "Deletes an SSH public key.", 953 // "flatPath": "v1/users/{usersId}/sshPublicKeys/{sshPublicKeysId}", 954 // "httpMethod": "DELETE", 955 // "id": "oslogin.users.sshPublicKeys.delete", 956 // "parameterOrder": [ 957 // "name" 958 // ], 959 // "parameters": { 960 // "name": { 961 // "description": "Required. The fingerprint of the public key to update. Public keys are identified by their SHA-256 fingerprint. The fingerprint of the public key is in format `users/{user}/sshPublicKeys/{fingerprint}`.", 962 // "location": "path", 963 // "pattern": "^users/[^/]+/sshPublicKeys/[^/]+$", 964 // "required": true, 965 // "type": "string" 966 // } 967 // }, 968 // "path": "v1/{+name}", 969 // "response": { 970 // "$ref": "Empty" 971 // }, 972 // "scopes": [ 973 // "https://www.googleapis.com/auth/cloud-platform", 974 // "https://www.googleapis.com/auth/compute" 975 // ] 976 // } 977 978} 979 980// method id "oslogin.users.sshPublicKeys.get": 981 982type UsersSshPublicKeysGetCall struct { 983 s *Service 984 name string 985 urlParams_ gensupport.URLParams 986 ifNoneMatch_ string 987 ctx_ context.Context 988 header_ http.Header 989} 990 991// Get: Retrieves an SSH public key. 992// 993// - name: The fingerprint of the public key to retrieve. Public keys 994// are identified by their SHA-256 fingerprint. The fingerprint of the 995// public key is in format `users/{user}/sshPublicKeys/{fingerprint}`. 996func (r *UsersSshPublicKeysService) Get(name string) *UsersSshPublicKeysGetCall { 997 c := &UsersSshPublicKeysGetCall{s: r.s, urlParams_: make(gensupport.URLParams)} 998 c.name = name 999 return c 1000} 1001 1002// Fields allows partial responses to be retrieved. See 1003// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse 1004// for more information. 1005func (c *UsersSshPublicKeysGetCall) Fields(s ...googleapi.Field) *UsersSshPublicKeysGetCall { 1006 c.urlParams_.Set("fields", googleapi.CombineFields(s)) 1007 return c 1008} 1009 1010// IfNoneMatch sets the optional parameter which makes the operation 1011// fail if the object's ETag matches the given value. This is useful for 1012// getting updates only after the object has changed since the last 1013// request. Use googleapi.IsNotModified to check whether the response 1014// error from Do is the result of In-None-Match. 1015func (c *UsersSshPublicKeysGetCall) IfNoneMatch(entityTag string) *UsersSshPublicKeysGetCall { 1016 c.ifNoneMatch_ = entityTag 1017 return c 1018} 1019 1020// Context sets the context to be used in this call's Do method. Any 1021// pending HTTP request will be aborted if the provided context is 1022// canceled. 1023func (c *UsersSshPublicKeysGetCall) Context(ctx context.Context) *UsersSshPublicKeysGetCall { 1024 c.ctx_ = ctx 1025 return c 1026} 1027 1028// Header returns an http.Header that can be modified by the caller to 1029// add HTTP headers to the request. 1030func (c *UsersSshPublicKeysGetCall) Header() http.Header { 1031 if c.header_ == nil { 1032 c.header_ = make(http.Header) 1033 } 1034 return c.header_ 1035} 1036 1037func (c *UsersSshPublicKeysGetCall) doRequest(alt string) (*http.Response, error) { 1038 reqHeaders := make(http.Header) 1039 reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/20210812") 1040 for k, v := range c.header_ { 1041 reqHeaders[k] = v 1042 } 1043 reqHeaders.Set("User-Agent", c.s.userAgent()) 1044 if c.ifNoneMatch_ != "" { 1045 reqHeaders.Set("If-None-Match", c.ifNoneMatch_) 1046 } 1047 var body io.Reader = nil 1048 c.urlParams_.Set("alt", alt) 1049 c.urlParams_.Set("prettyPrint", "false") 1050 urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}") 1051 urls += "?" + c.urlParams_.Encode() 1052 req, err := http.NewRequest("GET", urls, body) 1053 if err != nil { 1054 return nil, err 1055 } 1056 req.Header = reqHeaders 1057 googleapi.Expand(req.URL, map[string]string{ 1058 "name": c.name, 1059 }) 1060 return gensupport.SendRequest(c.ctx_, c.s.client, req) 1061} 1062 1063// Do executes the "oslogin.users.sshPublicKeys.get" call. 1064// Exactly one of *SshPublicKey or error will be non-nil. Any non-2xx 1065// status code is an error. Response headers are in either 1066// *SshPublicKey.ServerResponse.Header or (if a response was returned at 1067// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified 1068// to check whether the returned error was because 1069// http.StatusNotModified was returned. 1070func (c *UsersSshPublicKeysGetCall) Do(opts ...googleapi.CallOption) (*SshPublicKey, error) { 1071 gensupport.SetOptions(c.urlParams_, opts...) 1072 res, err := c.doRequest("json") 1073 if res != nil && res.StatusCode == http.StatusNotModified { 1074 if res.Body != nil { 1075 res.Body.Close() 1076 } 1077 return nil, &googleapi.Error{ 1078 Code: res.StatusCode, 1079 Header: res.Header, 1080 } 1081 } 1082 if err != nil { 1083 return nil, err 1084 } 1085 defer googleapi.CloseBody(res) 1086 if err := googleapi.CheckResponse(res); err != nil { 1087 return nil, err 1088 } 1089 ret := &SshPublicKey{ 1090 ServerResponse: googleapi.ServerResponse{ 1091 Header: res.Header, 1092 HTTPStatusCode: res.StatusCode, 1093 }, 1094 } 1095 target := &ret 1096 if err := gensupport.DecodeResponse(target, res); err != nil { 1097 return nil, err 1098 } 1099 return ret, nil 1100 // { 1101 // "description": "Retrieves an SSH public key.", 1102 // "flatPath": "v1/users/{usersId}/sshPublicKeys/{sshPublicKeysId}", 1103 // "httpMethod": "GET", 1104 // "id": "oslogin.users.sshPublicKeys.get", 1105 // "parameterOrder": [ 1106 // "name" 1107 // ], 1108 // "parameters": { 1109 // "name": { 1110 // "description": "Required. The fingerprint of the public key to retrieve. Public keys are identified by their SHA-256 fingerprint. The fingerprint of the public key is in format `users/{user}/sshPublicKeys/{fingerprint}`.", 1111 // "location": "path", 1112 // "pattern": "^users/[^/]+/sshPublicKeys/[^/]+$", 1113 // "required": true, 1114 // "type": "string" 1115 // } 1116 // }, 1117 // "path": "v1/{+name}", 1118 // "response": { 1119 // "$ref": "SshPublicKey" 1120 // }, 1121 // "scopes": [ 1122 // "https://www.googleapis.com/auth/cloud-platform", 1123 // "https://www.googleapis.com/auth/compute" 1124 // ] 1125 // } 1126 1127} 1128 1129// method id "oslogin.users.sshPublicKeys.patch": 1130 1131type UsersSshPublicKeysPatchCall struct { 1132 s *Service 1133 name string 1134 sshpublickey *SshPublicKey 1135 urlParams_ gensupport.URLParams 1136 ctx_ context.Context 1137 header_ http.Header 1138} 1139 1140// Patch: Updates an SSH public key and returns the profile information. 1141// This method supports patch semantics. 1142// 1143// - name: The fingerprint of the public key to update. Public keys are 1144// identified by their SHA-256 fingerprint. The fingerprint of the 1145// public key is in format `users/{user}/sshPublicKeys/{fingerprint}`. 1146func (r *UsersSshPublicKeysService) Patch(name string, sshpublickey *SshPublicKey) *UsersSshPublicKeysPatchCall { 1147 c := &UsersSshPublicKeysPatchCall{s: r.s, urlParams_: make(gensupport.URLParams)} 1148 c.name = name 1149 c.sshpublickey = sshpublickey 1150 return c 1151} 1152 1153// UpdateMask sets the optional parameter "updateMask": Mask to control 1154// which fields get updated. Updates all if not present. 1155func (c *UsersSshPublicKeysPatchCall) UpdateMask(updateMask string) *UsersSshPublicKeysPatchCall { 1156 c.urlParams_.Set("updateMask", updateMask) 1157 return c 1158} 1159 1160// Fields allows partial responses to be retrieved. See 1161// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse 1162// for more information. 1163func (c *UsersSshPublicKeysPatchCall) Fields(s ...googleapi.Field) *UsersSshPublicKeysPatchCall { 1164 c.urlParams_.Set("fields", googleapi.CombineFields(s)) 1165 return c 1166} 1167 1168// Context sets the context to be used in this call's Do method. Any 1169// pending HTTP request will be aborted if the provided context is 1170// canceled. 1171func (c *UsersSshPublicKeysPatchCall) Context(ctx context.Context) *UsersSshPublicKeysPatchCall { 1172 c.ctx_ = ctx 1173 return c 1174} 1175 1176// Header returns an http.Header that can be modified by the caller to 1177// add HTTP headers to the request. 1178func (c *UsersSshPublicKeysPatchCall) Header() http.Header { 1179 if c.header_ == nil { 1180 c.header_ = make(http.Header) 1181 } 1182 return c.header_ 1183} 1184 1185func (c *UsersSshPublicKeysPatchCall) doRequest(alt string) (*http.Response, error) { 1186 reqHeaders := make(http.Header) 1187 reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/20210812") 1188 for k, v := range c.header_ { 1189 reqHeaders[k] = v 1190 } 1191 reqHeaders.Set("User-Agent", c.s.userAgent()) 1192 var body io.Reader = nil 1193 body, err := googleapi.WithoutDataWrapper.JSONReader(c.sshpublickey) 1194 if err != nil { 1195 return nil, err 1196 } 1197 reqHeaders.Set("Content-Type", "application/json") 1198 c.urlParams_.Set("alt", alt) 1199 c.urlParams_.Set("prettyPrint", "false") 1200 urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}") 1201 urls += "?" + c.urlParams_.Encode() 1202 req, err := http.NewRequest("PATCH", urls, body) 1203 if err != nil { 1204 return nil, err 1205 } 1206 req.Header = reqHeaders 1207 googleapi.Expand(req.URL, map[string]string{ 1208 "name": c.name, 1209 }) 1210 return gensupport.SendRequest(c.ctx_, c.s.client, req) 1211} 1212 1213// Do executes the "oslogin.users.sshPublicKeys.patch" call. 1214// Exactly one of *SshPublicKey or error will be non-nil. Any non-2xx 1215// status code is an error. Response headers are in either 1216// *SshPublicKey.ServerResponse.Header or (if a response was returned at 1217// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified 1218// to check whether the returned error was because 1219// http.StatusNotModified was returned. 1220func (c *UsersSshPublicKeysPatchCall) Do(opts ...googleapi.CallOption) (*SshPublicKey, error) { 1221 gensupport.SetOptions(c.urlParams_, opts...) 1222 res, err := c.doRequest("json") 1223 if res != nil && res.StatusCode == http.StatusNotModified { 1224 if res.Body != nil { 1225 res.Body.Close() 1226 } 1227 return nil, &googleapi.Error{ 1228 Code: res.StatusCode, 1229 Header: res.Header, 1230 } 1231 } 1232 if err != nil { 1233 return nil, err 1234 } 1235 defer googleapi.CloseBody(res) 1236 if err := googleapi.CheckResponse(res); err != nil { 1237 return nil, err 1238 } 1239 ret := &SshPublicKey{ 1240 ServerResponse: googleapi.ServerResponse{ 1241 Header: res.Header, 1242 HTTPStatusCode: res.StatusCode, 1243 }, 1244 } 1245 target := &ret 1246 if err := gensupport.DecodeResponse(target, res); err != nil { 1247 return nil, err 1248 } 1249 return ret, nil 1250 // { 1251 // "description": "Updates an SSH public key and returns the profile information. This method supports patch semantics.", 1252 // "flatPath": "v1/users/{usersId}/sshPublicKeys/{sshPublicKeysId}", 1253 // "httpMethod": "PATCH", 1254 // "id": "oslogin.users.sshPublicKeys.patch", 1255 // "parameterOrder": [ 1256 // "name" 1257 // ], 1258 // "parameters": { 1259 // "name": { 1260 // "description": "Required. The fingerprint of the public key to update. Public keys are identified by their SHA-256 fingerprint. The fingerprint of the public key is in format `users/{user}/sshPublicKeys/{fingerprint}`.", 1261 // "location": "path", 1262 // "pattern": "^users/[^/]+/sshPublicKeys/[^/]+$", 1263 // "required": true, 1264 // "type": "string" 1265 // }, 1266 // "updateMask": { 1267 // "description": "Mask to control which fields get updated. Updates all if not present.", 1268 // "format": "google-fieldmask", 1269 // "location": "query", 1270 // "type": "string" 1271 // } 1272 // }, 1273 // "path": "v1/{+name}", 1274 // "request": { 1275 // "$ref": "SshPublicKey" 1276 // }, 1277 // "response": { 1278 // "$ref": "SshPublicKey" 1279 // }, 1280 // "scopes": [ 1281 // "https://www.googleapis.com/auth/cloud-platform", 1282 // "https://www.googleapis.com/auth/compute" 1283 // ] 1284 // } 1285 1286} 1287