|
33 | 33 | } |
34 | 34 | }, |
35 | 35 | "schemas": { |
| 36 | + "Auth.Id": { |
| 37 | + "title": "Auth IDs required to authenticate", |
| 38 | + "description": "Object containing IDs necessary to perform user authentication in the EntraID.", |
| 39 | + "examples": [ |
| 40 | + { |
| 41 | + "appId": "2a7e1b3c-4d5f-4a8b-9e6a-1c2b7f3d8e4a", |
| 42 | + "tenantId": "9c1e7a2b-5d3f-4a8b-2c6e-7f1a3d9e8b5c" |
| 43 | + } |
| 44 | + ], |
| 45 | + "properties": { |
| 46 | + "appId": { |
| 47 | + "description": "Application ID that should be used in Access Tokens as the audience and the endpoint necessary for auth code flows.", |
| 48 | + "type": "string", |
| 49 | + "format": "uuid", |
| 50 | + "maxLength": 36, |
| 51 | + "minLength": 36, |
| 52 | + "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$", |
| 53 | + "readOnly": true |
| 54 | + }, |
| 55 | + "tenantId": { |
| 56 | + "description": "Tenant ID necessary for authority host URL configuration and UI customization.", |
| 57 | + "type": "string", |
| 58 | + "format": "uuid", |
| 59 | + "maxLength": 36, |
| 60 | + "minLength": 36, |
| 61 | + "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$", |
| 62 | + "readOnly": true |
| 63 | + } |
| 64 | + }, |
| 65 | + "type": "object", |
| 66 | + "required": [ |
| 67 | + "appId", |
| 68 | + "tenantId" |
| 69 | + ] |
| 70 | + }, |
36 | 71 | "Core.HealthReport": { |
37 | 72 | "title": "Core System - Health Report", |
38 | 73 | "description": "Health report that indicates if a service is down or not that the URL Shortener relies on.", |
|
73 | 108 | "sourceUrl": "https://www.example.com/vanityUrl", |
74 | 109 | "createdBy": "3c5a9b7e-2d4f-4c1b-8e6a-7f2b3d1c9e45", |
75 | 110 | "customUserAgentMatcher": null, |
| 111 | + "expectedBrokenScanStatusCode": null, |
76 | 112 | "domainConfigId": "9a1e7b2c-5d3f-4a8b-9c2e-6f1a3d7e8b54", |
| 113 | + "enabled": true, |
| 114 | + "enableLinkBrokenScan": false, |
77 | 115 | "updatedBy": "3c5a9b7e-2d4f-4c1b-8e6a-7f2b3d1c9e45", |
78 | 116 | "targetUrl": "https://www.example.com/very-long-and-complex-url-with_plenty-of-special-characters-and-non-repeated-words", |
| 117 | + "notEnabledAfter": "2025-12-31T23:59:59Z", |
| 118 | + "notEnabledBefore": null, |
79 | 119 | "targetUrlCustom": null, |
80 | 120 | "targetUrlMobile": null, |
81 | 121 | "targetUrlNodeJs": null, |
|
116 | 156 | ], |
117 | 157 | "maxLength": 512 |
118 | 158 | }, |
| 159 | + "expectedBrokenScanStatusCode": { |
| 160 | + "description": "Status code expected by the scheduled scan results.", |
| 161 | + "type": [ |
| 162 | + "integer", |
| 163 | + "null" |
| 164 | + ] |
| 165 | + }, |
119 | 166 | "domainConfigId": { |
120 | 167 | "description": "Object ID of the domain configuration that this redirect record is associated with.", |
121 | 168 | "type": "string", |
|
125 | 172 | "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$", |
126 | 173 | "readOnly": true |
127 | 174 | }, |
| 175 | + "enabled": { |
| 176 | + "description": " Flag that indicates if the created URL is enabled (`true`) or not (`false`).", |
| 177 | + "type": "boolean" |
| 178 | + }, |
| 179 | + "enableLinkBrokenScan": { |
| 180 | + "description": "Flag that enables (`true`) or disables (`false`) scans happening against the target to check if broken.", |
| 181 | + "type": "boolean" |
| 182 | + }, |
128 | 183 | "updatedBy": { |
129 | 184 | "description": "Object ID of the last user who updated this record.", |
130 | 185 | "type": "string", |
|
138 | 193 | "type": "string", |
139 | 194 | "format": "uri" |
140 | 195 | }, |
| 196 | + "notEnabledAfter": { |
| 197 | + "description": "Date that when present, indicates when the link expires.", |
| 198 | + "type": [ |
| 199 | + "string", |
| 200 | + "null" |
| 201 | + ], |
| 202 | + "format": "date-time" |
| 203 | + }, |
| 204 | + "notEnabledBefore": { |
| 205 | + "description": "Date that when present, indicates when the link goes live.", |
| 206 | + "type": [ |
| 207 | + "string", |
| 208 | + "null" |
| 209 | + ], |
| 210 | + "format": "date-time" |
| 211 | + }, |
141 | 212 | "targetUrlCustom": { |
142 | 213 | "description": "Target URL for custom defined and matching user agent clients.", |
143 | 214 | "type": [ |
|
193 | 264 | "sourceUrl", |
194 | 265 | "createdBy", |
195 | 266 | "customUserAgentMatcher", |
| 267 | + "expectedBrokenScanStatusCode", |
196 | 268 | "domainConfigId", |
| 269 | + "enabled", |
| 270 | + "enableLinkBrokenScan", |
197 | 271 | "updatedBy", |
198 | 272 | "targetUrl", |
| 273 | + "notEnabledAfter", |
| 274 | + "notEnabledBefore", |
199 | 275 | "targetUrlCustom", |
200 | 276 | "targetUrlMobile", |
201 | 277 | "targetUrlNodeJs", |
|
410 | 486 | }, |
411 | 487 | "description": "Create vanity or numeric short version of your desired URL. Share it digitally, as QR code, or print it.", |
412 | 488 | "title": "SHI URL Shortener", |
413 | | - "version": "0.0.2" |
| 489 | + "version": "0.0.3" |
414 | 490 | }, |
415 | 491 | "openapi": "3.1.1", |
416 | 492 | "paths": { |
417 | 493 | "/Api/Auth/Id": { |
418 | 494 | "get": { |
| 495 | + "summary": "Retrieves the IDs required to authenticate.", |
419 | 496 | "description": "Provides the Tenant ID and the Application ID of the service principal that access tokens need to be issued against. This is also useful for configuring public clients to be able to authenticate to for auth code flows.", |
420 | 497 | "operationId": "/Api/Auth/Id/Get", |
421 | 498 | "responses": { |
422 | 499 | "200": { |
| 500 | + "description": "OK", |
423 | 501 | "content": { |
424 | 502 | "application/json": { |
425 | 503 | "schema": { |
426 | | - "properties": { |
427 | | - "appId": { |
428 | | - "description": "Application ID that should be used in Access Tokens as the audience and the endpoint necessary for auth code flows.", |
429 | | - "type": "string", |
430 | | - "format": "uuid", |
431 | | - "maxLength": 36, |
432 | | - "minLength": 36, |
433 | | - "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$", |
434 | | - "readOnly": true |
435 | | - }, |
436 | | - "tenantId": { |
437 | | - "description": "Tenant ID necessary for authority host URL configuration and UI customization.", |
438 | | - "type": "string", |
439 | | - "format": "uuid", |
440 | | - "maxLength": 36, |
441 | | - "minLength": 36, |
442 | | - "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$", |
443 | | - "readOnly": true |
444 | | - } |
445 | | - }, |
446 | | - "type": "object", |
447 | | - "required": [ |
448 | | - "appId", |
449 | | - "tenantId" |
450 | | - ] |
| 504 | + "$ref": "#/components/schemas/Auth.Id" |
451 | 505 | } |
452 | 506 | } |
453 | | - }, |
454 | | - "description": "OK" |
| 507 | + } |
455 | 508 | }, |
456 | 509 | "500": { |
457 | 510 | "$ref": "#/components/responses/500" |
|
460 | 513 | "tags": [ |
461 | 514 | "Core" |
462 | 515 | ], |
463 | | - "security": [], |
464 | | - "summary": "Retrieves the IDs required to authenticate." |
| 516 | + "security": [] |
465 | 517 | } |
466 | 518 | }, |
467 | 519 | "/Api/Core/Health": { |
|
682 | 734 | "Complete and proper payload": { |
683 | 735 | "description": "Request where all required fields are present and valid.", |
684 | 736 | "value": { |
| 737 | + "id": "7e2b1c8a-4f3d-4e2a-9b1a-2c6e8d7f1a23", |
685 | 738 | "sourceUrl": "https://www.example.com/long-and-complex-url", |
686 | 739 | "createdBy": "3c5a9b7e-2d4f-4c1b-8e6a-7f2b3d1c9e45", |
687 | 740 | "customUserAgentMatcher": null, |
| 741 | + "expectedBrokenScanStatusCode": null, |
688 | 742 | "domainConfigId": "9a1e7b2c-5d3f-4a8b-9c2e-6f1a3d7e8b54", |
| 743 | + "enabled": true, |
| 744 | + "enableLinkBrokenScan": false, |
689 | 745 | "updatedBy": "3c5a9b7e-2d4f-4c1b-8e6a-7f2b3d1c9e45", |
690 | 746 | "targetUrl": "https://www.example.com/target", |
| 747 | + "notEnabledAfter": null, |
| 748 | + "notEnabledBefore": null, |
691 | 749 | "targetUrlCustom": null, |
692 | 750 | "targetUrlMobile": null, |
693 | 751 | "targetUrlNodeJs": null, |
|
0 commit comments