| 1 | {{define "trash"}}{{template "top" .}} |
| 2 | {{if .Flash}}<p class="banner">{{.Flash}}</p>{{end}} |
| 3 | {{if .FlashErr}}<p class="banner error">{{.FlashErr}}</p>{{end}} |
| 4 | <h1>Trash</h1> |
| 5 | {{if .Trashed}} |
| 6 | <p>A deleted app serves nothing and is hidden from the app list, but everything it had — |
| 7 | its releases, its channels, its history — is still here. Restoring one brings all of that |
| 8 | back with <strong>no routes</strong>: run <code>carlos add <host></code> afterwards to |
| 9 | serve it again.</p> |
| 10 | <p class="small">A temporary app (named tmp-...) needs no carlos add: its instance records are kept |
| 11 | in the Trash, so hosts serve it again on their own once it is restored.</p> |
| 12 | <p class="small">Left alone, the platform destroys a trashed app on its own on the date in the last column: |
| 13 | 30 days after it was deleted, or 3 days for a temporary app. That is permanent. The objects go, and the |
| 14 | name is free for anyone in this account to claim again.</p> |
| 15 | <div class="tablewrap"> |
| 16 | <table> |
| 17 | <tr><th>App</th><th>Deleted by</th><th>Deleted</th><th>Destroyed on</th><th></th></tr> |
| 18 | {{range .Trashed}} |
| 19 | <tr> |
| 20 | <td>{{.App}}</td> |
| 21 | <td>{{emptyOrDash .Actor}}</td> |
| 22 | <td>{{fmtTime .DeletedAt}}</td> |
| 23 | <td>{{fmtTime .PurgesAt}}</td> |
| 24 | <td> |
| 25 | <form method="post" action="{{$.Base}}/trash/restore"> |
| 26 | <input type="hidden" name="csrf" value="{{$.CSRF}}"> |
| 27 | <input type="hidden" name="app" value="{{.App}}"> |
| 28 | <button class="linkish" type="submit">Restore</button> |
| 29 | </form> |
| 30 | </td> |
| 31 | </tr> |
| 32 | {{end}} |
| 33 | </table> |
| 34 | </div> |
| 35 | {{if .IsOwner}} |
| 36 | <h2>Delete now</h2> |
| 37 | <p class="small">Deleting now does what the wait would do on its own, immediately and |
| 38 | permanently: every object the app owns is destroyed and its name is freed. There is no undo |
| 39 | and no copy anywhere. Type the app's name to confirm, then confirm with your passkey. A |
| 40 | signed-in browser on its own is not enough. An app still marked as production cannot be |
| 41 | permanently deleted, whatever you type. Turn its safety delay off first.</p> |
| 42 | {{range .Trashed}} |
| 43 | <form class="signin" method="post" action="{{$.Base}}/trash/delete"> |
| 44 | <input type="hidden" name="csrf" value="{{$.CSRF}}"> |
| 45 | <input type="hidden" name="app" value="{{.App}}"> |
| 46 | <label class="visually-hidden" for="confirm-{{.App}}">Type {{.App}} to delete it permanently</label> |
| 47 | <input id="confirm-{{.App}}" type="text" name="confirm" placeholder="{{.App}}"> |
| 48 | <button type="submit">Delete “{{.App}}” permanently</button> |
| 49 | </form> |
| 50 | {{end}} |
| 51 | {{end}} |
| 52 | {{else}} |
| 53 | <p>Nothing here. An app deleted with <code>carlos apps delete</code> waits in this Trash, |
| 54 | restorable the whole time, until the platform destroys it: 30 days for most apps, 3 days for a |
| 55 | temporary one.</p> |
| 56 | {{end}} |
| 57 | {{template "bottom" .}}{{end}} |
| 58 | |