Update frontend
This commit is contained in:
parent
3eaa7d2397
commit
160ed35d30
@ -14,28 +14,22 @@
|
|||||||
</b-navbar-brand>
|
</b-navbar-brand>
|
||||||
<b-navbar-nav>
|
<b-navbar-nav>
|
||||||
<b-nav-item :to="'/'">Home</b-nav-item>
|
<b-nav-item :to="'/'">Home</b-nav-item>
|
||||||
<b-nav-item :to="'/hello'">Hello</b-nav-item>
|
|
||||||
<b-nav-item :to="'/stats'">Stats</b-nav-item>
|
<b-nav-item :to="'/stats'">Stats</b-nav-item>
|
||||||
<b-nav-item :to="'/attempts'">Attempts</b-nav-item>
|
<b-nav-item :to="'/attempts'">Attempts</b-nav-item>
|
||||||
</b-navbar-nav>
|
</b-navbar-nav>
|
||||||
</b-navbar>
|
</b-navbar>
|
||||||
</div>
|
</div>
|
||||||
<router-view></router-view>
|
<router-view></router-view>
|
||||||
<!-- <img alt="Vue logo" src="./assets/logo.png" /> -->
|
|
||||||
<!-- <HelloWorld msg="Welcome to Your Vue.js + TypeScript App" /> -->
|
|
||||||
<!-- <AttemptList items="{ testAttempts }" /> -->
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { Component, Vue } from 'vue-property-decorator';
|
import { Component, Vue } from 'vue-property-decorator';
|
||||||
import HelloWorld from '@/components/HelloWorld.vue';
|
|
||||||
import AttemptList from '@/components/AttemptList.vue';
|
import AttemptList from '@/components/AttemptList.vue';
|
||||||
import Stats from '@/components/Stats.vue';
|
import Stats from '@/components/Stats.vue';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
components: {
|
components: {
|
||||||
HelloWorld,
|
|
||||||
AttemptList,
|
AttemptList,
|
||||||
Stats,
|
Stats,
|
||||||
},
|
},
|
||||||
|
@ -2,12 +2,7 @@
|
|||||||
<div class="attemptlist">
|
<div class="attemptlist">
|
||||||
<h1>Attempt list</h1>
|
<h1>Attempt list</h1>
|
||||||
<p>
|
<p>
|
||||||
<b-table
|
<b-table striped hover :items="attempts" :fields="fields"></b-table>
|
||||||
striped
|
|
||||||
hover
|
|
||||||
:items="prettiedAttempts"
|
|
||||||
:fields="fields"
|
|
||||||
></b-table>
|
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@ -15,8 +10,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { Component, Prop, Vue } from 'vue-property-decorator';
|
import { Component, Prop, Vue } from 'vue-property-decorator';
|
||||||
import { BvTableFieldArray } from 'bootstrap-vue';
|
import { BvTableFieldArray } from 'bootstrap-vue';
|
||||||
import ago from 's-ago';
|
import { LoginAttempt } from '@/apiary/apiary';
|
||||||
import { LoginAttempt, fakeAttempt, fakeAttemptStream } from '@/apiary/apiary';
|
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
export default class AttemptList extends Vue {
|
export default class AttemptList extends Vue {
|
||||||
@ -28,7 +22,7 @@ export default class AttemptList extends Vue {
|
|||||||
{
|
{
|
||||||
key: 'date',
|
key: 'date',
|
||||||
sortable: true,
|
sortable: true,
|
||||||
// formatter: (value: string): string => ago(new Date(value)),
|
formatter: (value: string): string => new Date(value).toTimeString(),
|
||||||
sortByFormatted: false,
|
sortByFormatted: false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -41,6 +35,9 @@ export default class AttemptList extends Vue {
|
|||||||
key: 'remoteIP',
|
key: 'remoteIP',
|
||||||
sortable: true,
|
sortable: true,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
key: 'country',
|
||||||
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
@ -48,18 +45,6 @@ export default class AttemptList extends Vue {
|
|||||||
this.attempts = [];
|
this.attempts = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
prettiedAttempts(): LoginAttempt[] {
|
|
||||||
const prettied = this.attempts.map<LoginAttempt>((value: LoginAttempt) => ({
|
|
||||||
date: ago(new Date(value.date)),
|
|
||||||
remoteIP: value.remoteIP,
|
|
||||||
username: value.username,
|
|
||||||
password: value.password,
|
|
||||||
sshClientVersion: value.sshClientVersion,
|
|
||||||
connectionUUID: value.connectionUUID,
|
|
||||||
}));
|
|
||||||
return prettied;
|
|
||||||
}
|
|
||||||
|
|
||||||
mounted(): void {
|
mounted(): void {
|
||||||
/**
|
/**
|
||||||
console.log(this);
|
console.log(this);
|
||||||
@ -74,7 +59,7 @@ export default class AttemptList extends Vue {
|
|||||||
}, 1000);
|
}, 1000);
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const attemptStream = fakeAttemptStream();
|
const attemptStream = new EventSource('/api/stream');
|
||||||
attemptStream.addEventListener('message', (ev: MessageEvent<string>) => {
|
attemptStream.addEventListener('message', (ev: MessageEvent<string>) => {
|
||||||
console.log(ev);
|
console.log(ev);
|
||||||
const parsed: LoginAttempt = JSON.parse(ev.data);
|
const parsed: LoginAttempt = JSON.parse(ev.data);
|
||||||
|
@ -1,59 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div class="hello">
|
|
||||||
<h1>{{ msg }}</h1>
|
|
||||||
<p>
|
|
||||||
For a guide and recipes on how to configure / customize this project,<br>
|
|
||||||
check out the
|
|
||||||
<a href="https://cli.vuejs.org" target="_blank" rel="noopener">vue-cli documentation</a>.
|
|
||||||
</p>
|
|
||||||
<h3>Installed CLI Plugins</h3>
|
|
||||||
<ul>
|
|
||||||
<li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-babel" target="_blank" rel="noopener">babel</a></li>
|
|
||||||
<li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-typescript" target="_blank" rel="noopener">typescript</a></li>
|
|
||||||
<li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-eslint" target="_blank" rel="noopener">eslint</a></li>
|
|
||||||
</ul>
|
|
||||||
<h3>Essential Links</h3>
|
|
||||||
<ul>
|
|
||||||
<li><a href="https://vuejs.org" target="_blank" rel="noopener">Core Docs</a></li>
|
|
||||||
<li><a href="https://forum.vuejs.org" target="_blank" rel="noopener">Forum</a></li>
|
|
||||||
<li><a href="https://chat.vuejs.org" target="_blank" rel="noopener">Community Chat</a></li>
|
|
||||||
<li><a href="https://twitter.com/vuejs" target="_blank" rel="noopener">Twitter</a></li>
|
|
||||||
<li><a href="https://news.vuejs.org" target="_blank" rel="noopener">News</a></li>
|
|
||||||
</ul>
|
|
||||||
<h3>Ecosystem</h3>
|
|
||||||
<ul>
|
|
||||||
<li><a href="https://router.vuejs.org" target="_blank" rel="noopener">vue-router</a></li>
|
|
||||||
<li><a href="https://vuex.vuejs.org" target="_blank" rel="noopener">vuex</a></li>
|
|
||||||
<li><a href="https://github.com/vuejs/vue-devtools#vue-devtools" target="_blank" rel="noopener">vue-devtools</a></li>
|
|
||||||
<li><a href="https://vue-loader.vuejs.org" target="_blank" rel="noopener">vue-loader</a></li>
|
|
||||||
<li><a href="https://github.com/vuejs/awesome-vue" target="_blank" rel="noopener">awesome-vue</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script lang="ts">
|
|
||||||
import { Component, Prop, Vue } from 'vue-property-decorator';
|
|
||||||
|
|
||||||
@Component
|
|
||||||
export default class HelloWorld extends Vue {
|
|
||||||
@Prop() private msg!: string;
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<!-- Add "scoped" attribute to limit CSS to this component only -->
|
|
||||||
<style scoped lang="scss">
|
|
||||||
h3 {
|
|
||||||
margin: 40px 0 0;
|
|
||||||
}
|
|
||||||
ul {
|
|
||||||
list-style-type: none;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
li {
|
|
||||||
display: inline-block;
|
|
||||||
margin: 0 10px;
|
|
||||||
}
|
|
||||||
a {
|
|
||||||
color: #42b983;
|
|
||||||
}
|
|
||||||
</style>
|
|
@ -2,13 +2,11 @@ import Vue from 'vue';
|
|||||||
import { BootstrapVue, IconsPlugin } from 'bootstrap-vue';
|
import { BootstrapVue, IconsPlugin } from 'bootstrap-vue';
|
||||||
import VueRouter, { RouteConfig } from 'vue-router';
|
import VueRouter, { RouteConfig } from 'vue-router';
|
||||||
import AttemptList from '@/components/AttemptList.vue';
|
import AttemptList from '@/components/AttemptList.vue';
|
||||||
import HelloWorld from '@/components/HelloWorld.vue';
|
|
||||||
import Stats from '@/components/Stats.vue';
|
import Stats from '@/components/Stats.vue';
|
||||||
import 'bootstrap/dist/css/bootstrap.css';
|
import 'bootstrap/dist/css/bootstrap.css';
|
||||||
import 'bootstrap-vue/dist/bootstrap-vue.css';
|
import 'bootstrap-vue/dist/bootstrap-vue.css';
|
||||||
import '@fontsource/rubik';
|
import '@fontsource/rubik';
|
||||||
import '@fontsource/secular-one';
|
import '@fontsource/secular-one';
|
||||||
import { LoginAttempt } from '@/apiary/apiary';
|
|
||||||
import App from './App.vue';
|
import App from './App.vue';
|
||||||
|
|
||||||
Vue.config.productionTip = false;
|
Vue.config.productionTip = false;
|
||||||
@ -19,24 +17,13 @@ Vue.use(IconsPlugin);
|
|||||||
|
|
||||||
Vue.use(VueRouter);
|
Vue.use(VueRouter);
|
||||||
|
|
||||||
Vue.use(VueRouter);
|
|
||||||
|
|
||||||
const routes: Array<RouteConfig> = [
|
const routes: Array<RouteConfig> = [
|
||||||
{
|
{
|
||||||
path: '/',
|
path: '/',
|
||||||
name: 'Home',
|
name: 'Home',
|
||||||
component: HelloWorld,
|
component: Stats,
|
||||||
alias: '/home',
|
alias: '/home',
|
||||||
},
|
},
|
||||||
{
|
|
||||||
path: '/hello',
|
|
||||||
name: 'Hello',
|
|
||||||
component: HelloWorld,
|
|
||||||
props: {
|
|
||||||
default: true,
|
|
||||||
msg: 'LOL',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
path: '/attempts',
|
path: '/attempts',
|
||||||
name: 'Attempt List',
|
name: 'Attempt List',
|
||||||
|
Loading…
Reference in New Issue
Block a user