Add Iroquois/Powow API mocking entrypoint

This commit is contained in:
2020-12-22 15:00:42 +01:00
parent d9a6c14041
commit 9b90eaf240
12 changed files with 358 additions and 91 deletions

View File

@ -1,6 +1,9 @@
package main
import (
"encoding/json"
"github.com/pkg/errors"
"gitlab.com/wpetit/goweb/template/html"
"forge.cadoles.com/Cadoles/fake-sms/internal/command"
@ -22,6 +25,14 @@ func getServiceContainer(conf *config.Config) (*service.Container, error) {
// Create and expose template service provider
ctn.Provide(template.ServiceName, html.ServiceProvider(
html.NewDirectoryLoader(conf.HTTP.TemplateDir),
html.WithHelper("toPrettyJSON", func(data interface{}) (string, error) {
json, err := json.MarshalIndent(data, "", " ")
if err != nil {
return "", errors.WithStack(err)
}
return string(json), nil
}),
))
// Create and expose config service provider

View File

@ -16,8 +16,9 @@
<table class="outbox table is-fullwidth is-striped is-hoverable">
<thead>
<tr>
<th class="sms-to">Recipient</th>
<th class="sms-sentat">Date</th>
<th class="sms-from">From</th>
<th class="sms-recipient">Recipient</th>
<th class="sms-sentat">Sent At</th>
<th class="sms-actions"></th>
</tr>
</thead>
@ -26,10 +27,11 @@
<tr data-controller="inbox-entry"
data-action="click->outbox-entry#onClick"
data-inbox-entry-link="./sms/{{ .ID }}">
<td class="sms-from">
<span class="is-size-7">{{ .From }}</span>
</td>
<td class="sms-recipient">
{{range .Recipient}}
<span class="tag">{{ .Recipient }}</span>
{{end}}
<span class="tag">{{ .Recipient }}</span>
</td>
<td class="sms-sentat">
<span class="is-size-7">{{ .SentAt.Format "02/01/2006 15:04:05"}}</span>

View File

@ -1,8 +1,8 @@
{{define "title"}}Email - FakeSMTP{{end}}
{{define "title"}}SMS - FakeSMTP{{end}}
{{define "header_buttons"}}
<button class="button is-danger"
data-controller="restful"
data-restful-endpoint="./{{ .Email.ID }}"
data-restful-endpoint="./{{ .SMS.ID }}"
data-restful-method="DELETE"
data-restful-redirect="../">
🗑️ Delete
@ -16,40 +16,21 @@
<div class="column">
<div class="columns">
<div class="column">
<h4 class="title is-size-4">Email</h4>
{{template "email_head" .}}
<h4 class="title is-size-4">SMS</h4>
{{template "sms_head" .}}
</div>
{{if .Email.Attachments}}
<div class="column is-narrow">
<h4 class="title is-size-4">Attachments ({{len .Email.Attachments}})</h4>
<ul>
{{ $email := .Email }}
{{range $i, $a := .Email.Attachments}}
<li><a href="{{ $email.ID }}/attachments/{{ $i }}" download="{{ $a.Name }}">{{ $a.Name }}</a></li>
{{end}}
</ul>
</div>
{{end}}
</div>
<div data-controller="tabs">
<div class="tabs">
<ul>
<li data-action="click->tabs#openTab" data-target="tabs.tab" data-tabs-name="html" {{if .Email.HTML}}class="is-active"{{end}}><a>HTML</a></li>
<li data-action="click->tabs#openTab" data-target="tabs.tab" data-tabs-name="text" {{if not .Email.HTML}}class="is-active"{{end}}><a>Text</a></li>
<li data-action="click->tabs#openTab" data-target="tabs.tab" data-tabs-name="headers"><a>Headers</a></li>
<li data-action="click->tabs#openTab" data-target="tabs.tab" data-tabs-name="text" class="is-active"><a>Body</a></li>
<li data-action="click->tabs#openTab" data-target="tabs.tab" data-tabs-name="metadata"><a>Metadata</a></li>
</ul>
</div>
<iframe data-target="tabs.tabContent" data-tabs-for="html"
frameborder="0"
data-controller="iframe"
data-action="load->iframe#onLoad"
style="width:100%;{{if not .Email.HTML}}display:none;{{end}}"
src="{{ .Email.ID }}/html">
</iframe>
<div data-target="tabs.tabContent" data-tabs-for="text" style="{{if .Email.HTML}}display:none;{{end}}width:100%;overflow:hidden;">
<pre style="white-space:pre-line;">{{ .Email.Text }}</pre>
<div data-target="tabs.tabContent" data-tabs-for="text" style="width:100%;overflow:hidden;">
<pre style="white-space:pre-line;">{{ .SMS.Body }}</pre>
</div>
<div data-target="tabs.tabContent" data-tabs-for="headers" style="display:none">
<div data-target="tabs.tabContent" data-tabs-for="metadata" style="display:none">
<div class="table-container">
<table class="table is-striped is-hoverable is-fullwidth">
<thead>
@ -59,13 +40,11 @@
<tr>
<thead>
<tbody>
{{range $k, $v := .Email.Headers}}
{{range $k, $v := .SMS.Metadata}}
<tr>
<td><code>{{ $k }}</code></td>
<td>
{{range $v}}
<code>{{ . }}</code>&nbsp;
{{end}}
<code>{{ toPrettyJSON . }}</code>&nbsp;
</td>
</tr>
{{end}}
@ -81,61 +60,30 @@
</div>
</section>
{{end}}
{{define "email_head"}}
{{define "sms_head"}}
<div class="columns">
<div class="column is-1">
<h5 class="is-size-5">From</h5>
</div>
<div class="column">
{{template "email_adresses" .Email.From}}
<span class="tag is-large">{{.SMS.From}}</span>
</div>
</div>
<div class="columns">
<div class="column is-1">
<h5 class="is-size-5">To</h5>
<h5 class="is-size-5">Recipient</h5>
</div>
<div class="column">
{{template "email_adresses" .Email.To}}
<span class="tag is-large">{{.SMS.Recipient}}</span>
</div>
</div>
{{if .Email.Cc }}
<div class="columns">
<div class="column is-1">
<h5 class="is-size-5">Cc</h5>
<h5 class="is-size-5">Sent At</h5>
</div>
<div class="column">
{{template "email_adresses" .Email.Cc}}
<p class="is-size-5">{{ .SMS.SentAt.Format "02/01/2006 15:04:05"}}</p>
</div>
</div>
{{end}}
{{if .Email.Cci }}
<div class="columns">
<div class="column is-1">
<h5 class="is-size-5">Cci</h5>
</div>
<div class="column">
{{template "email_adresses" .Email.Cci}}
</div>
</div>
{{end}}
<div class="columns">
<div class="column is-1">
<h5 class="is-size-5">Subject</h5>
</div>
<div class="column">
<p class="is-size-5">{{.Email.Subject}}</p>
</div>
</div>
{{end}}
{{define "email_adresses"}}
{{- range .}}
<span class="tag">
{{- if .Name -}}
{{.Name}} <{{.Address}}>
{{- else -}}
{{.Address}}
{{- end -}}
</span>
{{- end -}}
{{end}}
{{template "base" .}}