Gli agenti autenticati con token Bearer possono leggere today/pipeline e annotare attività, con host MCP allineati a quelli di produzione. Co-authored-by: Cursor <cursoragent@cursor.com>
54 lines
2.4 KiB
ERB
54 lines
2.4 KiB
ERB
<div class="space-y-6">
|
|
<div>
|
|
<h1 class="text-2xl font-semibold tracking-tight">Token API</h1>
|
|
<p class="mt-1 text-sm text-zinc-500">
|
|
Servono agli agenti (Cursor, Claude Code, Codex) per lavorare sul CRM. Il valore in chiaro si vede una sola volta.
|
|
</p>
|
|
</div>
|
|
|
|
<% if @revealed_token.present? %>
|
|
<div class="rounded-xl border border-amber-300 bg-amber-50 p-5 text-amber-950 dark:border-amber-700 dark:bg-amber-950 dark:text-amber-100">
|
|
<p class="text-sm font-semibold">Nuovo token — copialo ora</p>
|
|
<p class="mt-1 text-xs">Non verrà più mostrato. Incollalo in <code>CRM_API_TOKEN</code> nella config MCP.</p>
|
|
<pre class="mt-3 overflow-x-auto rounded-lg bg-white px-3 py-2 text-sm text-zinc-900 dark:bg-zinc-900 dark:text-zinc-100"><%= @revealed_token %></pre>
|
|
</div>
|
|
<% end %>
|
|
|
|
<section class="<%= card_class %> p-5">
|
|
<h2 class="text-lg font-semibold tracking-tight">Nuovo token</h2>
|
|
<%= form_with url: api_tokens_path, method: :post, class: "mt-4 flex flex-col gap-3 sm:flex-row sm:items-end" do %>
|
|
<div class="flex-1">
|
|
<label class="mb-1 block text-xs font-medium text-zinc-500" for="name">Nome</label>
|
|
<%= text_field_tag :name, nil, placeholder: "es. Cursor sul portatile", required: true, class: input_class %>
|
|
</div>
|
|
<%= submit_tag "Crea token", class: "#{btn_primary} sm:mb-0" %>
|
|
<% end %>
|
|
</section>
|
|
|
|
<section class="<%= card_class %>">
|
|
<% if @api_tokens.empty? %>
|
|
<p class="p-5 text-sm text-zinc-500">Nessun token attivo.</p>
|
|
<% else %>
|
|
<ul class="divide-y divide-zinc-100 dark:divide-zinc-800">
|
|
<% @api_tokens.each do |token| %>
|
|
<li class="flex flex-wrap items-center justify-between gap-3 p-4">
|
|
<div>
|
|
<div class="font-medium"><%= token.name %></div>
|
|
<div class="mt-0.5 text-xs text-zinc-500">
|
|
<%= token.masked %>
|
|
· creato <%= format_dt(token.created_at) %>
|
|
<% if token.last_used_at %>
|
|
· usato <%= format_dt(token.last_used_at) %>
|
|
<% else %>
|
|
· mai usato
|
|
<% end %>
|
|
</div>
|
|
</div>
|
|
<%= button_to "Revoca", api_token_path(token), method: :delete, class: "#{btn_danger} text-sm", data: { turbo_confirm: "Revocare questo token?" } %>
|
|
</li>
|
|
<% end %>
|
|
</ul>
|
|
<% end %>
|
|
</section>
|
|
</div>
|