1# coding=utf-8 2##################################################### 3# THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT # 4##################################################### 5# noqa: E128,E201 6from .asyncclient import AsyncBaseClient 7from .asyncclient import createApiClient 8from .asyncclient import config 9from .asyncclient import createTemporaryCredentials 10from .asyncclient import createSession 11_defaultConfig = config 12 13 14class Auth(AsyncBaseClient): 15 """ 16 Authentication related API end-points for Taskcluster and related 17 services. These API end-points are of interest if you wish to: 18 * Authorize a request signed with Taskcluster credentials, 19 * Manage clients and roles, 20 * Inspect or audit clients and roles, 21 * Gain access to various services guarded by this API. 22 23 Note that in this service "authentication" refers to validating the 24 correctness of the supplied credentials (that the caller posesses the 25 appropriate access token). This service does not provide any kind of user 26 authentication (identifying a particular person). 27 28 ### Clients 29 The authentication service manages _clients_, at a high-level each client 30 consists of a `clientId`, an `accessToken`, scopes, and some metadata. 31 The `clientId` and `accessToken` can be used for authentication when 32 calling Taskcluster APIs. 33 34 The client's scopes control the client's access to Taskcluster resources. 35 The scopes are *expanded* by substituting roles, as defined below. 36 37 ### Roles 38 A _role_ consists of a `roleId`, a set of scopes and a description. 39 Each role constitutes a simple _expansion rule_ that says if you have 40 the scope: `assume:<roleId>` you get the set of scopes the role has. 41 Think of the `assume:<roleId>` as a scope that allows a client to assume 42 a role. 43 44 As in scopes the `*` kleene star also have special meaning if it is 45 located at the end of a `roleId`. If you have a role with the following 46 `roleId`: `my-prefix*`, then any client which has a scope staring with 47 `assume:my-prefix` will be allowed to assume the role. 48 49 ### Guarded Services 50 The authentication service also has API end-points for delegating access 51 to some guarded service such as AWS S3, or Azure Table Storage. 52 Generally, we add API end-points to this server when we wish to use 53 Taskcluster credentials to grant access to a third-party service used 54 by many Taskcluster components. 55 """ 56 57 classOptions = { 58 } 59 serviceName = 'auth' 60 apiVersion = 'v1' 61 62 async def ping(self, *args, **kwargs): 63 """ 64 Ping Server 65 66 Respond without doing anything. 67 This endpoint is used to check that the service is up. 68 69 This method is ``stable`` 70 """ 71 72 return await self._makeApiCall(self.funcinfo["ping"], *args, **kwargs) 73 74 async def listClients(self, *args, **kwargs): 75 """ 76 List Clients 77 78 Get a list of all clients. With `prefix`, only clients for which 79 it is a prefix of the clientId are returned. 80 81 By default this end-point will try to return up to 1000 clients in one 82 request. But it **may return less, even none**. 83 It may also return a `continuationToken` even though there are no more 84 results. However, you can only be sure to have seen all results if you 85 keep calling `listClients` with the last `continuationToken` until you 86 get a result without a `continuationToken`. 87 88 This method gives output: ``v1/list-clients-response.json#`` 89 90 This method is ``stable`` 91 """ 92 93 return await self._makeApiCall(self.funcinfo["listClients"], *args, **kwargs) 94 95 async def client(self, *args, **kwargs): 96 """ 97 Get Client 98 99 Get information about a single client. 100 101 This method gives output: ``v1/get-client-response.json#`` 102 103 This method is ``stable`` 104 """ 105 106 return await self._makeApiCall(self.funcinfo["client"], *args, **kwargs) 107 108 async def createClient(self, *args, **kwargs): 109 """ 110 Create Client 111 112 Create a new client and get the `accessToken` for this client. 113 You should store the `accessToken` from this API call as there is no 114 other way to retrieve it. 115 116 If you loose the `accessToken` you can call `resetAccessToken` to reset 117 it, and a new `accessToken` will be returned, but you cannot retrieve the 118 current `accessToken`. 119 120 If a client with the same `clientId` already exists this operation will 121 fail. Use `updateClient` if you wish to update an existing client. 122 123 The caller's scopes must satisfy `scopes`. 124 125 This method takes input: ``v1/create-client-request.json#`` 126 127 This method gives output: ``v1/create-client-response.json#`` 128 129 This method is ``stable`` 130 """ 131 132 return await self._makeApiCall(self.funcinfo["createClient"], *args, **kwargs) 133 134 async def resetAccessToken(self, *args, **kwargs): 135 """ 136 Reset `accessToken` 137 138 Reset a clients `accessToken`, this will revoke the existing 139 `accessToken`, generate a new `accessToken` and return it from this 140 call. 141 142 There is no way to retrieve an existing `accessToken`, so if you loose it 143 you must reset the accessToken to acquire it again. 144 145 This method gives output: ``v1/create-client-response.json#`` 146 147 This method is ``stable`` 148 """ 149 150 return await self._makeApiCall(self.funcinfo["resetAccessToken"], *args, **kwargs) 151 152 async def updateClient(self, *args, **kwargs): 153 """ 154 Update Client 155 156 Update an exisiting client. The `clientId` and `accessToken` cannot be 157 updated, but `scopes` can be modified. The caller's scopes must 158 satisfy all scopes being added to the client in the update operation. 159 If no scopes are given in the request, the client's scopes remain 160 unchanged 161 162 This method takes input: ``v1/create-client-request.json#`` 163 164 This method gives output: ``v1/get-client-response.json#`` 165 166 This method is ``stable`` 167 """ 168 169 return await self._makeApiCall(self.funcinfo["updateClient"], *args, **kwargs) 170 171 async def enableClient(self, *args, **kwargs): 172 """ 173 Enable Client 174 175 Enable a client that was disabled with `disableClient`. If the client 176 is already enabled, this does nothing. 177 178 This is typically used by identity providers to re-enable clients that 179 had been disabled when the corresponding identity's scopes changed. 180 181 This method gives output: ``v1/get-client-response.json#`` 182 183 This method is ``stable`` 184 """ 185 186 return await self._makeApiCall(self.funcinfo["enableClient"], *args, **kwargs) 187 188 async def disableClient(self, *args, **kwargs): 189 """ 190 Disable Client 191 192 Disable a client. If the client is already disabled, this does nothing. 193 194 This is typically used by identity providers to disable clients when the 195 corresponding identity's scopes no longer satisfy the client's scopes. 196 197 This method gives output: ``v1/get-client-response.json#`` 198 199 This method is ``stable`` 200 """ 201 202 return await self._makeApiCall(self.funcinfo["disableClient"], *args, **kwargs) 203 204 async def deleteClient(self, *args, **kwargs): 205 """ 206 Delete Client 207 208 Delete a client, please note that any roles related to this client must 209 be deleted independently. 210 211 This method is ``stable`` 212 """ 213 214 return await self._makeApiCall(self.funcinfo["deleteClient"], *args, **kwargs) 215 216 async def listRoles(self, *args, **kwargs): 217 """ 218 List Roles 219 220 Get a list of all roles, each role object also includes the list of 221 scopes it expands to. 222 223 This method gives output: ``v1/list-roles-response.json#`` 224 225 This method is ``stable`` 226 """ 227 228 return await self._makeApiCall(self.funcinfo["listRoles"], *args, **kwargs) 229 230 async def role(self, *args, **kwargs): 231 """ 232 Get Role 233 234 Get information about a single role, including the set of scopes that the 235 role expands to. 236 237 This method gives output: ``v1/get-role-response.json#`` 238 239 This method is ``stable`` 240 """ 241 242 return await self._makeApiCall(self.funcinfo["role"], *args, **kwargs) 243 244 async def createRole(self, *args, **kwargs): 245 """ 246 Create Role 247 248 Create a new role. 249 250 The caller's scopes must satisfy the new role's scopes. 251 252 If there already exists a role with the same `roleId` this operation 253 will fail. Use `updateRole` to modify an existing role. 254 255 Creation of a role that will generate an infinite expansion will result 256 in an error response. 257 258 This method takes input: ``v1/create-role-request.json#`` 259 260 This method gives output: ``v1/get-role-response.json#`` 261 262 This method is ``stable`` 263 """ 264 265 return await self._makeApiCall(self.funcinfo["createRole"], *args, **kwargs) 266 267 async def updateRole(self, *args, **kwargs): 268 """ 269 Update Role 270 271 Update an existing role. 272 273 The caller's scopes must satisfy all of the new scopes being added, but 274 need not satisfy all of the client's existing scopes. 275 276 An update of a role that will generate an infinite expansion will result 277 in an error response. 278 279 This method takes input: ``v1/create-role-request.json#`` 280 281 This method gives output: ``v1/get-role-response.json#`` 282 283 This method is ``stable`` 284 """ 285 286 return await self._makeApiCall(self.funcinfo["updateRole"], *args, **kwargs) 287 288 async def deleteRole(self, *args, **kwargs): 289 """ 290 Delete Role 291 292 Delete a role. This operation will succeed regardless of whether or not 293 the role exists. 294 295 This method is ``stable`` 296 """ 297 298 return await self._makeApiCall(self.funcinfo["deleteRole"], *args, **kwargs) 299 300 async def expandScopesGet(self, *args, **kwargs): 301 """ 302 Expand Scopes 303 304 Return an expanded copy of the given scopeset, with scopes implied by any 305 roles included. 306 307 This call uses the GET method with an HTTP body. It remains only for 308 backward compatibility. 309 310 This method takes input: ``v1/scopeset.json#`` 311 312 This method gives output: ``v1/scopeset.json#`` 313 314 This method is ``deprecated`` 315 """ 316 317 return await self._makeApiCall(self.funcinfo["expandScopesGet"], *args, **kwargs) 318 319 async def expandScopes(self, *args, **kwargs): 320 """ 321 Expand Scopes 322 323 Return an expanded copy of the given scopeset, with scopes implied by any 324 roles included. 325 326 This method takes input: ``v1/scopeset.json#`` 327 328 This method gives output: ``v1/scopeset.json#`` 329 330 This method is ``stable`` 331 """ 332 333 return await self._makeApiCall(self.funcinfo["expandScopes"], *args, **kwargs) 334 335 async def currentScopes(self, *args, **kwargs): 336 """ 337 Get Current Scopes 338 339 Return the expanded scopes available in the request, taking into account all sources 340 of scopes and scope restrictions (temporary credentials, assumeScopes, client scopes, 341 and roles). 342 343 This method gives output: ``v1/scopeset.json#`` 344 345 This method is ``stable`` 346 """ 347 348 return await self._makeApiCall(self.funcinfo["currentScopes"], *args, **kwargs) 349 350 async def awsS3Credentials(self, *args, **kwargs): 351 """ 352 Get Temporary Read/Write Credentials S3 353 354 Get temporary AWS credentials for `read-write` or `read-only` access to 355 a given `bucket` and `prefix` within that bucket. 356 The `level` parameter can be `read-write` or `read-only` and determines 357 which type of credentials are returned. Please note that the `level` 358 parameter is required in the scope guarding access. The bucket name must 359 not contain `.`, as recommended by Amazon. 360 361 This method can only allow access to a whitelisted set of buckets. To add 362 a bucket to that whitelist, contact the Taskcluster team, who will add it to 363 the appropriate IAM policy. If the bucket is in a different AWS account, you 364 will also need to add a bucket policy allowing access from the Taskcluster 365 account. That policy should look like this: 366 367 ``` 368 { 369 "Version": "2012-10-17", 370 "Statement": [ 371 { 372 "Sid": "allow-taskcluster-auth-to-delegate-access", 373 "Effect": "Allow", 374 "Principal": { 375 "AWS": "arn:aws:iam::692406183521:root" 376 }, 377 "Action": [ 378 "s3:ListBucket", 379 "s3:GetObject", 380 "s3:PutObject", 381 "s3:DeleteObject", 382 "s3:GetBucketLocation" 383 ], 384 "Resource": [ 385 "arn:aws:s3:::<bucket>", 386 "arn:aws:s3:::<bucket>/*" 387 ] 388 } 389 ] 390 } 391 ``` 392 393 The credentials are set to expire after an hour, but this behavior is 394 subject to change. Hence, you should always read the `expires` property 395 from the response, if you intend to maintain active credentials in your 396 application. 397 398 Please note that your `prefix` may not start with slash `/`. Such a prefix 399 is allowed on S3, but we forbid it here to discourage bad behavior. 400 401 Also note that if your `prefix` doesn't end in a slash `/`, the STS 402 credentials may allow access to unexpected keys, as S3 does not treat 403 slashes specially. For example, a prefix of `my-folder` will allow 404 access to `my-folder/file.txt` as expected, but also to `my-folder.txt`, 405 which may not be intended. 406 407 Finally, note that the `PutObjectAcl` call is not allowed. Passing a canned 408 ACL other than `private` to `PutObject` is treated as a `PutObjectAcl` call, and 409 will result in an access-denied error from AWS. This limitation is due to a 410 security flaw in Amazon S3 which might otherwise allow indefinite access to 411 uploaded objects. 412 413 **EC2 metadata compatibility**, if the querystring parameter 414 `?format=iam-role-compat` is given, the response will be compatible 415 with the JSON exposed by the EC2 metadata service. This aims to ease 416 compatibility for libraries and tools built to auto-refresh credentials. 417 For details on the format returned by EC2 metadata service see: 418 [EC2 User Guide](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html#instance-metadata-security-credentials). 419 420 This method gives output: ``v1/aws-s3-credentials-response.json#`` 421 422 This method is ``stable`` 423 """ 424 425 return await self._makeApiCall(self.funcinfo["awsS3Credentials"], *args, **kwargs) 426 427 async def azureAccounts(self, *args, **kwargs): 428 """ 429 List Accounts Managed by Auth 430 431 Retrieve a list of all Azure accounts managed by Taskcluster Auth. 432 433 This method gives output: ``v1/azure-account-list-response.json#`` 434 435 This method is ``stable`` 436 """ 437 438 return await self._makeApiCall(self.funcinfo["azureAccounts"], *args, **kwargs) 439 440 async def azureTables(self, *args, **kwargs): 441 """ 442 List Tables in an Account Managed by Auth 443 444 Retrieve a list of all tables in an account. 445 446 This method gives output: ``v1/azure-table-list-response.json#`` 447 448 This method is ``stable`` 449 """ 450 451 return await self._makeApiCall(self.funcinfo["azureTables"], *args, **kwargs) 452 453 async def azureTableSAS(self, *args, **kwargs): 454 """ 455 Get Shared-Access-Signature for Azure Table 456 457 Get a shared access signature (SAS) string for use with a specific Azure 458 Table Storage table. 459 460 The `level` parameter can be `read-write` or `read-only` and determines 461 which type of credentials are returned. If level is read-write, it will create the 462 table if it doesn't already exist. 463 464 This method gives output: ``v1/azure-table-access-response.json#`` 465 466 This method is ``stable`` 467 """ 468 469 return await self._makeApiCall(self.funcinfo["azureTableSAS"], *args, **kwargs) 470 471 async def azureContainers(self, *args, **kwargs): 472 """ 473 List containers in an Account Managed by Auth 474 475 Retrieve a list of all containers in an account. 476 477 This method gives output: ``v1/azure-container-list-response.json#`` 478 479 This method is ``stable`` 480 """ 481 482 return await self._makeApiCall(self.funcinfo["azureContainers"], *args, **kwargs) 483 484 async def azureContainerSAS(self, *args, **kwargs): 485 """ 486 Get Shared-Access-Signature for Azure Container 487 488 Get a shared access signature (SAS) string for use with a specific Azure 489 Blob Storage container. 490 491 The `level` parameter can be `read-write` or `read-only` and determines 492 which type of credentials are returned. If level is read-write, it will create the 493 container if it doesn't already exist. 494 495 This method gives output: ``v1/azure-container-response.json#`` 496 497 This method is ``stable`` 498 """ 499 500 return await self._makeApiCall(self.funcinfo["azureContainerSAS"], *args, **kwargs) 501 502 async def sentryDSN(self, *args, **kwargs): 503 """ 504 Get DSN for Sentry Project 505 506 Get temporary DSN (access credentials) for a sentry project. 507 The credentials returned can be used with any Sentry client for up to 508 24 hours, after which the credentials will be automatically disabled. 509 510 If the project doesn't exist it will be created, and assigned to the 511 initial team configured for this component. Contact a Sentry admin 512 to have the project transferred to a team you have access to if needed 513 514 This method gives output: ``v1/sentry-dsn-response.json#`` 515 516 This method is ``stable`` 517 """ 518 519 return await self._makeApiCall(self.funcinfo["sentryDSN"], *args, **kwargs) 520 521 async def statsumToken(self, *args, **kwargs): 522 """ 523 Get Token for Statsum Project 524 525 Get temporary `token` and `baseUrl` for sending metrics to statsum. 526 527 The token is valid for 24 hours, clients should refresh after expiration. 528 529 This method gives output: ``v1/statsum-token-response.json#`` 530 531 This method is ``stable`` 532 """ 533 534 return await self._makeApiCall(self.funcinfo["statsumToken"], *args, **kwargs) 535 536 async def webhooktunnelToken(self, *args, **kwargs): 537 """ 538 Get Token for Webhooktunnel Proxy 539 540 Get temporary `token` and `id` for connecting to webhooktunnel 541 The token is valid for 96 hours, clients should refresh after expiration. 542 543 This method gives output: ``v1/webhooktunnel-token-response.json#`` 544 545 This method is ``stable`` 546 """ 547 548 return await self._makeApiCall(self.funcinfo["webhooktunnelToken"], *args, **kwargs) 549 550 async def authenticateHawk(self, *args, **kwargs): 551 """ 552 Authenticate Hawk Request 553 554 Validate the request signature given on input and return list of scopes 555 that the authenticating client has. 556 557 This method is used by other services that wish rely on Taskcluster 558 credentials for authentication. This way we can use Hawk without having 559 the secret credentials leave this service. 560 561 This method takes input: ``v1/authenticate-hawk-request.json#`` 562 563 This method gives output: ``v1/authenticate-hawk-response.json#`` 564 565 This method is ``stable`` 566 """ 567 568 return await self._makeApiCall(self.funcinfo["authenticateHawk"], *args, **kwargs) 569 570 async def testAuthenticate(self, *args, **kwargs): 571 """ 572 Test Authentication 573 574 Utility method to test client implementations of Taskcluster 575 authentication. 576 577 Rather than using real credentials, this endpoint accepts requests with 578 clientId `tester` and accessToken `no-secret`. That client's scopes are 579 based on `clientScopes` in the request body. 580 581 The request is validated, with any certificate, authorizedScopes, etc. 582 applied, and the resulting scopes are checked against `requiredScopes` 583 from the request body. On success, the response contains the clientId 584 and scopes as seen by the API method. 585 586 This method takes input: ``v1/test-authenticate-request.json#`` 587 588 This method gives output: ``v1/test-authenticate-response.json#`` 589 590 This method is ``stable`` 591 """ 592 593 return await self._makeApiCall(self.funcinfo["testAuthenticate"], *args, **kwargs) 594 595 async def testAuthenticateGet(self, *args, **kwargs): 596 """ 597 Test Authentication (GET) 598 599 Utility method similar to `testAuthenticate`, but with the GET method, 600 so it can be used with signed URLs (bewits). 601 602 Rather than using real credentials, this endpoint accepts requests with 603 clientId `tester` and accessToken `no-secret`. That client's scopes are 604 `['test:*', 'auth:create-client:test:*']`. The call fails if the 605 `test:authenticate-get` scope is not available. 606 607 The request is validated, with any certificate, authorizedScopes, etc. 608 applied, and the resulting scopes are checked, just like any API call. 609 On success, the response contains the clientId and scopes as seen by 610 the API method. 611 612 This method may later be extended to allow specification of client and 613 required scopes via query arguments. 614 615 This method gives output: ``v1/test-authenticate-response.json#`` 616 617 This method is ``stable`` 618 """ 619 620 return await self._makeApiCall(self.funcinfo["testAuthenticateGet"], *args, **kwargs) 621 622 funcinfo = { 623 "authenticateHawk": { 624 'args': [], 625 'input': 'v1/authenticate-hawk-request.json#', 626 'method': 'post', 627 'name': 'authenticateHawk', 628 'output': 'v1/authenticate-hawk-response.json#', 629 'route': '/authenticate-hawk', 630 'stability': 'stable', 631 }, 632 "awsS3Credentials": { 633 'args': ['level', 'bucket', 'prefix'], 634 'method': 'get', 635 'name': 'awsS3Credentials', 636 'output': 'v1/aws-s3-credentials-response.json#', 637 'query': ['format'], 638 'route': '/aws/s3/<level>/<bucket>/<prefix>', 639 'stability': 'stable', 640 }, 641 "azureAccounts": { 642 'args': [], 643 'method': 'get', 644 'name': 'azureAccounts', 645 'output': 'v1/azure-account-list-response.json#', 646 'route': '/azure/accounts', 647 'stability': 'stable', 648 }, 649 "azureContainerSAS": { 650 'args': ['account', 'container', 'level'], 651 'method': 'get', 652 'name': 'azureContainerSAS', 653 'output': 'v1/azure-container-response.json#', 654 'route': '/azure/<account>/containers/<container>/<level>', 655 'stability': 'stable', 656 }, 657 "azureContainers": { 658 'args': ['account'], 659 'method': 'get', 660 'name': 'azureContainers', 661 'output': 'v1/azure-container-list-response.json#', 662 'query': ['continuationToken'], 663 'route': '/azure/<account>/containers', 664 'stability': 'stable', 665 }, 666 "azureTableSAS": { 667 'args': ['account', 'table', 'level'], 668 'method': 'get', 669 'name': 'azureTableSAS', 670 'output': 'v1/azure-table-access-response.json#', 671 'route': '/azure/<account>/table/<table>/<level>', 672 'stability': 'stable', 673 }, 674 "azureTables": { 675 'args': ['account'], 676 'method': 'get', 677 'name': 'azureTables', 678 'output': 'v1/azure-table-list-response.json#', 679 'query': ['continuationToken'], 680 'route': '/azure/<account>/tables', 681 'stability': 'stable', 682 }, 683 "client": { 684 'args': ['clientId'], 685 'method': 'get', 686 'name': 'client', 687 'output': 'v1/get-client-response.json#', 688 'route': '/clients/<clientId>', 689 'stability': 'stable', 690 }, 691 "createClient": { 692 'args': ['clientId'], 693 'input': 'v1/create-client-request.json#', 694 'method': 'put', 695 'name': 'createClient', 696 'output': 'v1/create-client-response.json#', 697 'route': '/clients/<clientId>', 698 'stability': 'stable', 699 }, 700 "createRole": { 701 'args': ['roleId'], 702 'input': 'v1/create-role-request.json#', 703 'method': 'put', 704 'name': 'createRole', 705 'output': 'v1/get-role-response.json#', 706 'route': '/roles/<roleId>', 707 'stability': 'stable', 708 }, 709 "currentScopes": { 710 'args': [], 711 'method': 'get', 712 'name': 'currentScopes', 713 'output': 'v1/scopeset.json#', 714 'route': '/scopes/current', 715 'stability': 'stable', 716 }, 717 "deleteClient": { 718 'args': ['clientId'], 719 'method': 'delete', 720 'name': 'deleteClient', 721 'route': '/clients/<clientId>', 722 'stability': 'stable', 723 }, 724 "deleteRole": { 725 'args': ['roleId'], 726 'method': 'delete', 727 'name': 'deleteRole', 728 'route': '/roles/<roleId>', 729 'stability': 'stable', 730 }, 731 "disableClient": { 732 'args': ['clientId'], 733 'method': 'post', 734 'name': 'disableClient', 735 'output': 'v1/get-client-response.json#', 736 'route': '/clients/<clientId>/disable', 737 'stability': 'stable', 738 }, 739 "enableClient": { 740 'args': ['clientId'], 741 'method': 'post', 742 'name': 'enableClient', 743 'output': 'v1/get-client-response.json#', 744 'route': '/clients/<clientId>/enable', 745 'stability': 'stable', 746 }, 747 "expandScopes": { 748 'args': [], 749 'input': 'v1/scopeset.json#', 750 'method': 'post', 751 'name': 'expandScopes', 752 'output': 'v1/scopeset.json#', 753 'route': '/scopes/expand', 754 'stability': 'stable', 755 }, 756 "expandScopesGet": { 757 'args': [], 758 'input': 'v1/scopeset.json#', 759 'method': 'get', 760 'name': 'expandScopesGet', 761 'output': 'v1/scopeset.json#', 762 'route': '/scopes/expand', 763 'stability': 'deprecated', 764 }, 765 "listClients": { 766 'args': [], 767 'method': 'get', 768 'name': 'listClients', 769 'output': 'v1/list-clients-response.json#', 770 'query': ['prefix', 'continuationToken', 'limit'], 771 'route': '/clients/', 772 'stability': 'stable', 773 }, 774 "listRoles": { 775 'args': [], 776 'method': 'get', 777 'name': 'listRoles', 778 'output': 'v1/list-roles-response.json#', 779 'route': '/roles/', 780 'stability': 'stable', 781 }, 782 "ping": { 783 'args': [], 784 'method': 'get', 785 'name': 'ping', 786 'route': '/ping', 787 'stability': 'stable', 788 }, 789 "resetAccessToken": { 790 'args': ['clientId'], 791 'method': 'post', 792 'name': 'resetAccessToken', 793 'output': 'v1/create-client-response.json#', 794 'route': '/clients/<clientId>/reset', 795 'stability': 'stable', 796 }, 797 "role": { 798 'args': ['roleId'], 799 'method': 'get', 800 'name': 'role', 801 'output': 'v1/get-role-response.json#', 802 'route': '/roles/<roleId>', 803 'stability': 'stable', 804 }, 805 "sentryDSN": { 806 'args': ['project'], 807 'method': 'get', 808 'name': 'sentryDSN', 809 'output': 'v1/sentry-dsn-response.json#', 810 'route': '/sentry/<project>/dsn', 811 'stability': 'stable', 812 }, 813 "statsumToken": { 814 'args': ['project'], 815 'method': 'get', 816 'name': 'statsumToken', 817 'output': 'v1/statsum-token-response.json#', 818 'route': '/statsum/<project>/token', 819 'stability': 'stable', 820 }, 821 "testAuthenticate": { 822 'args': [], 823 'input': 'v1/test-authenticate-request.json#', 824 'method': 'post', 825 'name': 'testAuthenticate', 826 'output': 'v1/test-authenticate-response.json#', 827 'route': '/test-authenticate', 828 'stability': 'stable', 829 }, 830 "testAuthenticateGet": { 831 'args': [], 832 'method': 'get', 833 'name': 'testAuthenticateGet', 834 'output': 'v1/test-authenticate-response.json#', 835 'route': '/test-authenticate-get/', 836 'stability': 'stable', 837 }, 838 "updateClient": { 839 'args': ['clientId'], 840 'input': 'v1/create-client-request.json#', 841 'method': 'post', 842 'name': 'updateClient', 843 'output': 'v1/get-client-response.json#', 844 'route': '/clients/<clientId>', 845 'stability': 'stable', 846 }, 847 "updateRole": { 848 'args': ['roleId'], 849 'input': 'v1/create-role-request.json#', 850 'method': 'post', 851 'name': 'updateRole', 852 'output': 'v1/get-role-response.json#', 853 'route': '/roles/<roleId>', 854 'stability': 'stable', 855 }, 856 "webhooktunnelToken": { 857 'args': [], 858 'method': 'get', 859 'name': 'webhooktunnelToken', 860 'output': 'v1/webhooktunnel-token-response.json#', 861 'route': '/webhooktunnel', 862 'stability': 'stable', 863 }, 864 } 865 866 867__all__ = ['createTemporaryCredentials', 'config', '_defaultConfig', 'createApiClient', 'createSession', 'Auth'] 868