updating some components and configs
This commit is contained in:
parent
bac487e447
commit
de53c3c882
@ -6,7 +6,6 @@ APP_DOMAIN=localhost
|
|||||||
APP_URL="https://${APP_DOMAIN}"
|
APP_URL="https://${APP_DOMAIN}"
|
||||||
APP_UID_BYTES=8
|
APP_UID_BYTES=8
|
||||||
|
|
||||||
APP_JS_INTEGRITY_HASH=""
|
|
||||||
GIT_HASH="00000000"
|
GIT_HASH="00000000"
|
||||||
GIT_TAG="x.x.x"
|
GIT_TAG="x.x.x"
|
||||||
GIT_BRANCH="master"
|
GIT_BRANCH="master"
|
||||||
@ -57,3 +56,10 @@ PUSHER_APP_CLUSTER=mt1
|
|||||||
|
|
||||||
MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
|
MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
|
||||||
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
|
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
|
||||||
|
|
||||||
|
INTEGRITY_HASH_HUMANS_TXT=""
|
||||||
|
INTEGRITY_HASH_COPYRIGHT_HTML=""
|
||||||
|
INTEGRITY_HASH_NUNITO_REGULAR_WOFF2_FONT=""
|
||||||
|
INTEGRITY_HASH_POIRETONE_REGULAR_WOFF2_FONT=""
|
||||||
|
INTEGRITY_HASH_APP_CSS=""
|
||||||
|
INTEGRITY_HASH_APP_JS=""
|
||||||
|
@ -1,3 +1,28 @@
|
|||||||
|
<script setup>
|
||||||
|
import { ref } from 'vue'
|
||||||
|
|
||||||
|
defineEmits([])
|
||||||
|
|
||||||
|
const attrs = useAttrs()
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
class: {
|
||||||
|
type: String,
|
||||||
|
default: '',
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
// computed properties
|
||||||
|
const hasHeader = computed(() => !! useSlots().header);
|
||||||
|
|
||||||
|
// watchers
|
||||||
|
|
||||||
|
// lifecycle hooks
|
||||||
|
|
||||||
|
// methods
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="card" :class="class">
|
<div class="card" :class="class">
|
||||||
<div class="card-header" v-if="hasHeader">
|
<div class="card-header" v-if="hasHeader">
|
||||||
@ -8,26 +33,3 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
|
||||||
import { defineComponent, ref } from 'vue'
|
|
||||||
|
|
||||||
export default defineComponent({
|
|
||||||
props: {
|
|
||||||
class: {
|
|
||||||
type: String,
|
|
||||||
default: '',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
setup(props, {slots}) {
|
|
||||||
const hasHeader = ref(false)
|
|
||||||
|
|
||||||
if (slots.header && slots.header().length) {
|
|
||||||
hasHeader.value = true
|
|
||||||
}
|
|
||||||
|
|
||||||
return { hasHeader }
|
|
||||||
},
|
|
||||||
})
|
|
||||||
</script>
|
|
||||||
|
@ -239,6 +239,7 @@ import { Head, Link } from '@inertiajs/inertia-vue3'
|
|||||||
import SuccessNotifications from '@/Components/Notifications/SuccessNotifications.vue'
|
import SuccessNotifications from '@/Components/Notifications/SuccessNotifications.vue'
|
||||||
import ErrorNotifications from '@/Components/Notifications/ErrorNotifications.vue'
|
import ErrorNotifications from '@/Components/Notifications/ErrorNotifications.vue'
|
||||||
import GenericNotifications from '@/Components/Notifications/GenericNotifications.vue'
|
import GenericNotifications from '@/Components/Notifications/GenericNotifications.vue'
|
||||||
|
import WarningNotifications from '@/Components/Notifications/WarningNotifications.vue'
|
||||||
import ApplicationMark from '@/Jetstream/ApplicationMark.vue'
|
import ApplicationMark from '@/Jetstream/ApplicationMark.vue'
|
||||||
import ResponsiveNavLink from '@/Components/ResponsiveNavLink.vue'
|
import ResponsiveNavLink from '@/Components/ResponsiveNavLink.vue'
|
||||||
import SidenavLink from '@/Components/SidenavLink.vue'
|
import SidenavLink from '@/Components/SidenavLink.vue'
|
||||||
@ -257,6 +258,7 @@ export default defineComponent({
|
|||||||
SuccessNotifications,
|
SuccessNotifications,
|
||||||
ErrorNotifications,
|
ErrorNotifications,
|
||||||
GenericNotifications,
|
GenericNotifications,
|
||||||
|
WarningNotifications,
|
||||||
ApplicationMark,
|
ApplicationMark,
|
||||||
ResponsiveNavLink,
|
ResponsiveNavLink,
|
||||||
SidenavLink,
|
SidenavLink,
|
||||||
|
@ -4,15 +4,25 @@
|
|||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
|
||||||
|
<!-- Set the base URL for all relative URLs within the document -->
|
||||||
|
<base href="https://example.com/">
|
||||||
|
|
||||||
<meta name="robots" content="index,follow">
|
<meta name="robots" content="index,follow">
|
||||||
<meta name="googlebot" content="index,follow">
|
<meta name="googlebot" content="index,follow">
|
||||||
|
|
||||||
<meta name="format-detection" content="telephone=no">
|
<meta name="format-detection" content="telephone=no">
|
||||||
<meta http-equiv="x-dns-prefetch-control" content="off">
|
|
||||||
|
|
||||||
<meta name="google" content="notranslate">
|
<meta name="google" content="notranslate">
|
||||||
<meta name="google" content="nositelinkssearchbox">
|
<meta name="google" content="nositelinkssearchbox">
|
||||||
|
|
||||||
|
<!-- Prefetching, preloading, prebrowsing -->
|
||||||
|
<meta http-equiv="x-dns-prefetch-control" content="off">
|
||||||
|
<link rel="dns-prefetch" href="//example.com/">
|
||||||
|
<link rel="preconnect" href="https://www.example.com/">
|
||||||
|
<link rel="prefetch" href="https://www.example.com/">
|
||||||
|
<link rel="prerender" href="https://example.com/">
|
||||||
|
<link rel="preload" href="image.png" as="image">
|
||||||
|
|
||||||
<meta name="rating" content="General">
|
<meta name="rating" content="General">
|
||||||
|
|
||||||
<meta name="url" content="{{ url('/') }}">
|
<meta name="url" content="{{ url('/') }}">
|
||||||
@ -21,8 +31,12 @@
|
|||||||
|
|
||||||
<title inertia>{{ config('app.name', 'Laravel') }}</title>
|
<title inertia>{{ config('app.name', 'Laravel') }}</title>
|
||||||
|
|
||||||
|
<!-- Name of web application (only should be used if the website is used as an app) -->
|
||||||
|
<meta name="application-name" content="Application Name">
|
||||||
|
|
||||||
<!-- Privacy -->
|
<!-- Privacy -->
|
||||||
<meta name="twitter:dnt" content="on">
|
<meta name="twitter:dnt" content="on">
|
||||||
|
<meta name="pinterest" content="nopin" description="Sorry, you can't save from my website!">
|
||||||
|
|
||||||
<!-- analytics -->
|
<!-- analytics -->
|
||||||
<!-- -->
|
<!-- -->
|
||||||
@ -37,23 +51,27 @@
|
|||||||
{{-- <link href="{{ url('/.webmanifest') }}" rel="manifest"> --}}
|
{{-- <link href="{{ url('/.webmanifest') }}" rel="manifest"> --}}
|
||||||
|
|
||||||
<!-- Files listing who was involved in this site and copyrights -->
|
<!-- Files listing who was involved in this site and copyrights -->
|
||||||
<link href="{{ url('/humans.txt') }}" rel="author">
|
<link href="{{ url('/humans.txt') }}" rel="author" integrity="{{ env('INTEGRITY_HASH_HUMANS_TXT') }}">
|
||||||
<link href="{{ url('/copyright.html') }}" rel="copyright">
|
<link href="{{ url('/copyright.html') }}" rel="copyright" integrity="{{ env('INTEGRITY_HASH_COPYRIGHT_HTML') }}">
|
||||||
|
|
||||||
<!-- Feeds -->
|
<!-- Feeds -->
|
||||||
{{-- <link href="https://feeds.feedburner.com/example" type="application/rss+xml" title="RSS" rel="alternate"> --}}
|
{{-- <link href="https://feeds.feedburner.com/example" type="application/rss+xml" title="RSS" rel="alternate"> --}}
|
||||||
{{-- <link href="{{ url('/feed.atom') }}" type="application/atom+xml" title="Atom 0.3" rel="alternate"> --}}
|
{{-- <link href="{{ url('/feed.atom') }}" type="application/atom+xml" title="Atom 0.3" rel="alternate"> --}}
|
||||||
|
|
||||||
|
<!-- oEmbed links -->
|
||||||
|
<link rel="alternate" type="application/json+oembed" href="https://example.com/services/oembed?url=http%3A%2F%2Fexample.com%2Ffoo%2F&format=json" title="oEmbed Profile: JSON">
|
||||||
|
<link rel="alternate" type="text/xml+oembed" href="https://example.com/services/oembed?url=http%3A%2F%2Fexample.com%2Ffoo%2F&format=xml" title="oEmbed Profile: XML">
|
||||||
|
|
||||||
<!-- Favicon -->
|
<!-- Favicon -->
|
||||||
{{-- <link href="{{ asset('/favicon.ico') }}" rel="icon" sizes="16x16" type="image/icon"> --}}
|
{{-- <link href="{{ asset('/favicon.ico') }}" rel="icon" sizes="16x16" type="image/icon"> --}}
|
||||||
{{-- <link href="{{ asset('/favicon.svg') }}" rel="icon" type="image/svg+xml"> --}}
|
{{-- <link href="{{ asset('/favicon.svg') }}" rel="icon" type="image/svg+xml"> --}}
|
||||||
{{-- <link href="{{ asset('/favicon.png') }}" rel="icon" sizes="192x192"> --}}
|
{{-- <link href="{{ asset('/favicon.png') }}" rel="icon" sizes="192x192"> --}}
|
||||||
|
|
||||||
<!-- Font preloads (should be done for each font file) -->
|
<!-- Font preloads (should be done for each font file) -->
|
||||||
<link href="{{ asset('/fonts/Nunito/Nunito-Regular.woff2') }}" rel="preload" as="font" type="font/woff2" crossorigin="anonymous">
|
<link href="{{ asset('/fonts/Nunito/Nunito-Regular.woff2') }}" rel="preload" as="font" type="font/woff2" integrity="{{ env('INTEGRITY_HASH_NUNITO_REGULAR_WOFF2_FONT') }}" crossorigin="anonymous">
|
||||||
|
|
||||||
<!-- CSS -->
|
<!-- CSS -->
|
||||||
<link href="{{ mix('/css/app.css') }}" rel="stylesheet" media="screen">
|
<link href="{{ mix('/css/app.css') }}" rel="stylesheet" integrity="{{ env('INTEGRITY_HASH_APP_CSS') }}" media="screen">
|
||||||
|
|
||||||
<!-- JS that must be executed before the document is loaded -->
|
<!-- JS that must be executed before the document is loaded -->
|
||||||
<script>
|
<script>
|
||||||
@ -65,9 +83,11 @@
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
@routes
|
@routes
|
||||||
<script src="{{ mix('/js/app.js') }}" defer></script>
|
<script src="{{ mix('/js/app.js') }}" integrity="{{ env('INTEGRITY_HASH_APP_JS') }}" defer></script>
|
||||||
</head>
|
</head>
|
||||||
<body class="bg-gray-100 font-sans antialiased">
|
<body class="bg-gray-100 font-sans antialiased">
|
||||||
|
<x-country-flags></x-country-flags>
|
||||||
|
|
||||||
@inertia
|
@inertia
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
|
@ -12,6 +12,12 @@ module.exports = {
|
|||||||
darkMode: 'class',
|
darkMode: 'class',
|
||||||
|
|
||||||
theme: {
|
theme: {
|
||||||
|
fontFamily: {
|
||||||
|
display: ['PoiretOne'],
|
||||||
|
body: ['OpenSans'],
|
||||||
|
},
|
||||||
|
|
||||||
|
extend: {
|
||||||
colors: {
|
colors: {
|
||||||
// use https://uicolors.app/create
|
// use https://uicolors.app/create
|
||||||
// neutals
|
// neutals
|
||||||
@ -43,18 +49,7 @@ module.exports = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
// oranges
|
// oranges
|
||||||
'vesuvius': {
|
|
||||||
50: '#fffbeb',
|
|
||||||
100: '#fef3c7',
|
|
||||||
200: '#fde58a',
|
|
||||||
300: '#fbd24e',
|
|
||||||
400: '#fabe25',
|
|
||||||
500: '#f49d0c',
|
|
||||||
600: '#d87607',
|
|
||||||
700: '#bc560a',
|
|
||||||
800: '#923f0e',
|
|
||||||
900: '#78340f',
|
|
||||||
},
|
|
||||||
|
|
||||||
// yellows
|
// yellows
|
||||||
|
|
||||||
@ -242,11 +237,8 @@ module.exports = {
|
|||||||
sans: ['OpenSans', ...defaultTheme.fontFamily.sans],
|
sans: ['OpenSans', ...defaultTheme.fontFamily.sans],
|
||||||
serif: ['Nunito', ...defaultTheme.fontFamily.serif],
|
serif: ['Nunito', ...defaultTheme.fontFamily.serif],
|
||||||
mono: ['RobotoMono', ...defaultTheme.fontFamily.mono],
|
mono: ['RobotoMono', ...defaultTheme.fontFamily.mono],
|
||||||
display: ['PoiretOne', ...defaultTheme.fontFamily.display],
|
|
||||||
body: ['OpenSans', ...defaultTheme.fontFamily.body],
|
|
||||||
},
|
},
|
||||||
|
},
|
||||||
extend: {},
|
|
||||||
},
|
},
|
||||||
|
|
||||||
plugins: [
|
plugins: [
|
||||||
|
@ -1,7 +1,14 @@
|
|||||||
const mix = require('laravel-mix');
|
const mix = require('laravel-mix');
|
||||||
const { exec } = require('child_process');
|
const { exec } = require('child_process');
|
||||||
|
|
||||||
const shaCmd = "cat public/js/app.js | openssl dgst -sha512 -binary | openssl base64 -A";
|
const resIntegrityFiles = [
|
||||||
|
{ "envKey": "HUMANS_TXT", "path": "public/humans.txt" },
|
||||||
|
{ "envKey": "COPYRIGHT_HTML", "path": "public/copyright.html" },
|
||||||
|
{ "envKey": "NUNITO_REGULAR_WOFF2_FONT", "path": "public/fonts/Nunito/Nunito-Regular.woff2" },
|
||||||
|
{ "envKey": "POIRETONE_REGULAR_WOFF2_FONT", "path": "public/fonts/PoiretOne/PoiretOne-Regular.woff2" },
|
||||||
|
{ "envKey": "APP_CSS", "path": "public/css/app.css" },
|
||||||
|
{ "envKey": "APP_JS", "path": "public/js/app.js" },
|
||||||
|
];
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
@ -17,38 +24,40 @@ const shaCmd = "cat public/js/app.js | openssl dgst -sha512 -binary | openssl ba
|
|||||||
mix.js('resources/js/app.js', 'public/js')
|
mix.js('resources/js/app.js', 'public/js')
|
||||||
.vue()
|
.vue()
|
||||||
.sourceMaps()
|
.sourceMaps()
|
||||||
.after(stats => {
|
|
||||||
exec(shaCmd, (shaError, shaStdout, shaStderr) => {
|
|
||||||
if (shaError) {
|
|
||||||
console.error(`shaCmd error: ${shaError.message}`);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (shaStderr) {
|
|
||||||
console.error(`shaCmd stderr: ${shaStderr}`);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
let sha512Hash = shaStdout;
|
|
||||||
let sedCmd = `sed -i '/^APP_JS_INTEGRITY_HASH="*/c\APP_JS_INTEGRITY_HASH="sha512-${sha512Hash}"' .env`;
|
|
||||||
|
|
||||||
exec(sedCmd, (sedError, sedStdout, sedStderr) => {
|
|
||||||
if (sedError) {
|
|
||||||
console.error(`sedCmd error: ${sedError.message}`);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (sedStderr) {
|
|
||||||
console.error(`sedCmd stderr: ${sedStderr}`);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
console.log('Replaced SHA512 hash for integrity attribute.');
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
||||||
.postCss('resources/css/app.css', 'public/css', [
|
.postCss('resources/css/app.css', 'public/css', [
|
||||||
require('postcss-import'),
|
require('postcss-import'),
|
||||||
require('tailwindcss'),
|
require('tailwindcss'),
|
||||||
])
|
])
|
||||||
.sourceMaps()
|
.sourceMaps()
|
||||||
.webpackConfig(require('./webpack.config'));
|
.webpackConfig(require('./webpack.config'))
|
||||||
|
.after(stats => {
|
||||||
|
resIntegrityFiles.forEach(file => {
|
||||||
|
exec(`cat ${file.path} | openssl dgst -sha512 -binary | openssl base64 -A`, (shaError, shaStdout, shaStderr) => {
|
||||||
|
if (shaError) {
|
||||||
|
console.error(`error getting SHA hash for ${file.path}: ${shaError.message}`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (shaStderr) {
|
||||||
|
console.error(`error getting SHA hash for ${file.path}: ${shaStderr}`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
let sha512Hash = shaStdout;
|
||||||
|
let sedCmd = `sed -i '/^INTEGRITY_HASH_${file.envKey}="*/c\INTEGRITY_HASH_${file.envKey}="sha512-${sha512Hash}"' .env`;
|
||||||
|
|
||||||
|
exec(sedCmd, (sedError, sedStdout, sedStderr) => {
|
||||||
|
if (sedError) {
|
||||||
|
console.error(`error executing sed command for ${file.envKey}: ${sedError.message}`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (sedStderr) {
|
||||||
|
console.error(`error executing sed command for ${file.envKey}`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
console.log(`Replaced SHA512 hash for ${file.envKey}.`);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
if (mix.inProduction()) {
|
if (mix.inProduction()) {
|
||||||
mix.version();
|
mix.version();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user