Dass167 Link Review

<a href="https://dass.io/l/Ab9XzK1"
   style="display:inline-block;padding:8px 12px;background:#0052CC;color:#fff;
          text-decoration:none;border-radius:4px;font-family:sans-serif;">
   View the Report
</a>
<!-- Plain‑text fallback -->
https://dass.io/l/Ab9XzK1

| # | Requirement | Description | |---|-------------|-------------| | FR‑1 | Link Generation API | POST /api/v2/links receives targetUrl, assetId?, expiry?, allowedRoles[] and returns linkId, shortUrl, expiresAt . | | FR‑2 | Short‑URL Engine | Generates a 7‑character alphanumeric slug (e.g., https://dass.io/l/Ab9XzK1). Collisions resolved via retry up to 5 attempts. | | FR‑3 | Access Control | When a user clicks a short URL, the system checks the current session’s role(s) against allowedRoles. If the user lacks permission, they are redirected to a permission‑denied page with a request‑access CTA. | | FR‑4 | Expiry / Revocation | Links can be set to expire at a specific datetime or revoked manually via DELETE /api/v2/links/linkId. Expired/revoked links show a link no longer valid page. | | FR‑5 | Analytics Capture | On each click record: linkId, timestamp, userId, userRole, IP, user‑agent, referrer. Data is stored in a read‑optimized analytics DB (e.g., ClickHouse). | | FR‑6 | Branding & UI | The link renders as a button or inline text based on a displayStyle flag (button|inline). Branding uses the global primary colour, hover effect, and accessible contrast (≥ 4.5:1). | | FR‑7 | Internationalisation | Text for the button/tooltip is pulled from i18n files (en, de, fr, es, …). Default fallback = English. | | FR‑8 | Email‑Safe Rendering | When used inside an HTML email, the component must render a fully‑qualified <a> with inline styles (no external CSS) and include a fallback plain‑text URL. | | FR‑9 | Error Handling | If the target URL is malformed, the API returns 400 Bad Request. If the user is unauthenticated, return 401. If they lack permission, return 403. | | FR‑10 | Auditing | All create, update, delete actions on a link are written to an immutable audit log (audit_links) with action, actorId, timestamp, payloadHash. | | FR‑11 | Rate Limiting | API endpoints are limited to 100 req/min per consumer key; exceeding returns 429 Too Many Requests. | | FR‑12 | Monitoring & Alerts | Metrics: link_creation_success, link_click_rate, link_revocation_rate. Alert on spikes (> 5 σ) or 0% click‑through for newly created links after 48 h. |


If you want to view the content without the risks associated with free "tube" sites: dass167 link

| Scenario | Title | Message | CTA | |----------|-------|---------|-----| | Unauthorized | Permission Denied | “You do not have access to this resource.” | “Request Access” (opens ticket form) | | Expired / Revoked | Link No Longer Valid | “This link has expired or been revoked.” | “Contact Owner” (mailto) | | Not Found | Invalid Link | “The link you followed does not exist.” | “Return to Home” | &lt;a href="https://dass

All error pages respect the global layout and include a breadcrumb back to the dashboard. If you want to view the content without


openapi: 3.1.0
info:
  title: DASS‑167 Link Service
  version: 2.5.0
paths:
  /api/v2/links:
    post:
      summary: Create a new short link
      security:
        - bearerAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LinkCreateRequest'
      responses:
        '201':
          description: Link created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LinkCreateResponse'
        '400':  $ref: '#/components/responses/BadRequest' 
        '401':  $ref: '#/components/responses/Unauthorized' 
        '429':  $ref: '#/components/responses/TooManyRequests'
/l/slug:
    get:
      summary: Resolve a short link and redirect
      parameters:
        - name: slug
          in: path
          required: true
          schema:  type: string, pattern: '^[A-Za-z0-9]7$' 
      responses:
        '302':
          description: Redirect to target URL
        '403':
          description: Permission denied (redirect to error page)
        '410':
          description: Link expired or revoked
        '404':
          description: Not found
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
  schemas:
    LinkCreateRequest:
      type: object
      required: [targetUrl]
      properties:
        targetUrl:
          type: string
          format: uri
          description: Full URL of the asset (internal or external)
        assetId:
          type: string
          description: Optional internal asset identifier for audit linkage
        expiry:
          type: string
          format: date-time
          description: ISO‑8601 timestamp when link becomes invalid
        allowedRoles:
          type: array
          items:
            type: string
          description: List of role identifiers allowed to use the link
        displayStyle:
          type: string
          enum: [button, inline]
          default: inline
        i18nKey:
          type: string
          description: Translation key for button/tooltip text
    LinkCreateResponse:
      type: object
      properties:
        linkId:
          type: string
          description: Internal UUID of the link
        shortUrl:
          type: string
          format: uri
        expiresAt:
          type: string
          format: date-time
          nullable: true

Close My Cart
Close Wishlist
Close
Close
Navigation
Categories