Skip to content
Snippets Groups Projects
Commit 698fae22 authored by Tomáš Valenta's avatar Tomáš Valenta
Browse files

finish backend, authentication, Dockerfile, hooks, CI

parent 5d606ddd
No related branches found
No related tags found
No related merge requests found
Showing
with 158 additions and 41 deletions
FROM python:3.11
RUN mkdir /app
RUN curl -fsSL https://deb.nodesource.com/setup_19.x | bash -
RUN apt-get -y install make autoconf automake libtool pkg-config nodejs git python3-pip
RUN rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY . .
# Install Python reqs
RUN cd server; pip install -r requirements/base.txt
# Install Node.js reqs
RUN cd frontend; npm install
# Build and copy files
RUN cd frontend; \
npm run build; \
rm -fr ../server/templates ../server/static; \
mkdir ../server/templates ../server/static; \
cp dist/index.html ../server/templates/; \
cp dist/static/* ../server/static/; \
cp dist/favicon.ico ../server/static/; \
rm -fr dist
RUN bash -c "adduser --disabled-login --quiet --gecos app app && \
chmod -R o+r /app/ && \
chmod o+x /app/server/run.sh"
USER app
WORKDIR /app/server
EXPOSE 8000
CMD ["bash", "run.sh"]
......@@ -10,22 +10,40 @@ help:
@echo "Setup:"
@echo " venv Setup virtual environment"
@echo " install Install dependencies to venv"
@echo " install-hooks Install pre-commit hooks"
@echo " hooks Run pre-commit hooks manually"
@echo " build Build CSS and JS files"
@echo ""
@echo "Application:"
@echo " run Run the application on port ${PORT}"
venv: .venv/bin/python
.venv/bin/python:
${PYTHON} -m venv ${VENV}
venv:
cd server; ${PYTHON} -m venv ${VENV}
install: venv
${VENV}/bin/pip install -r requirements/base.txt -r requirements/production.txt
cd server; \
${VENV}/bin/pip install -r requirements/base.txt
cd frontend; \
npm install
install-hooks:
pre-commit install --install-hooks
hooks:
pre-commit run -a
build: venv
npm run build
${VENV}/bin/python manage.py collectstatic --noinput --settings=${SETTINGS}
cd frontend; \
rm -fr dist; \
npm run build; \
rm -fr ../server/server/templates ../server/server/static; \
mkdir ../server/server/templates ../server/server/static; \
cp dist/index.html ../server/server/templates/; \
cp dist/static/* ../server/server/static/; \
cp dist/favicon.ico ../server/server/static/; \
rm -fr dist
run: venv
${VENV}/bin/python manage.py runserver ${PORT} --settings=${SETTINGS}
cd server; \
${VENV}/bin/python -m gunicorn -w 4 -b :${PORT} "server:create_app()"
......@@ -2,7 +2,7 @@
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="icon" href="/favicon.ico">
<link rel="icon" href="/static/favicon.ico">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Generátor grafiky</title>
</head>
......
......@@ -9,10 +9,7 @@ import { RouterLink } from 'vue-router'
<script>
export default {
components: { VueSelect },
props: [
'headerName',
'defaultTemplate',
],
props: ['defaultTemplate'],
data () {
return {
currentTemplate: this.defaultTemplate
......@@ -38,7 +35,7 @@ export default {
to="/"
class="text-white pl-4 font-bold text-xl hover:no-underline lg:border-r lg:border-grey-300 lg:pr-8 flex gap-2 items-center"
>
{{ this.headerName }}
Generátor grafiky
<img
:src="v2Image"
class="h-5"
......
......@@ -69,8 +69,8 @@ export default {
<canvas
ref="canvas"
class="w-full border border-gray-300 drop-shadow-md"
:width="this.width"
:height="this.height"
:width="width"
:height="height"
></canvas>
</div>
</div>
......
......@@ -68,11 +68,11 @@ export default {
<template>
<section
class="flex flex-col gap-2 bg-gray-100 p-4 drop-shadow-md"
:style="{'z-index': this.zIndex}"
:style="{'z-index': zIndex}"
>
<InputHeading
:name="this.name"
:important="this.important"
:name="name"
:important="important"
icon="thumbs-up"
></InputHeading>
<VueSelect
......
......@@ -6,7 +6,7 @@ import VueSelect from 'vue-select'
<script>
export default {
components: { InputHeading },
components: { InputHeading, VueSelect },
props: [
'name',
'important',
......@@ -94,11 +94,11 @@ export default {
<template>
<section
class="flex flex-col gap-2 bg-gray-100 p-4 drop-shadow-md"
:style="{'z-index': this.zIndex}"
:style="{'z-index': zIndex}"
>
<InputHeading
:name="this.name"
:important="this.important"
:name="name"
:important="important"
icon="file-picture"
></InputHeading>
......
......@@ -15,7 +15,7 @@ export default {
<template>
<div
class="flex gap-2 items-center"
:style="{'z-index': this.zIndex}"
:style="{'z-index': zIndex}"
>
<i
:class="'ico--' + icon"
......
......@@ -7,7 +7,7 @@ import VueSelect from 'vue-select'
<script>
export default {
components: { InputHeading, ColorPicker },
components: { InputHeading, ColorPicker, VueSelect },
props: [
'name',
'important',
......@@ -42,7 +42,7 @@ export default {
<template>
<section
class="flex flex-col gap-2 bg-gray-100 p-4 drop-shadow-md"
:style="{'z-index': this.zIndex}"
:style="{'z-index': zIndex}"
>
<InputHeading
:name="name"
......@@ -60,7 +60,7 @@ export default {
<ul
class="flex flex-col gap-2"
v-for="(templateColorIdentifier, index) in Object.keys(this.currentColors)"
v-for="(templateColorIdentifier, index) in Object.keys(currentColors)"
:key="index"
>
<ColorPicker
......
......@@ -14,11 +14,11 @@ export default {
<template>
<section
class="flex flex-col gap-2 bg-gray-100 p-4 drop-shadow-md"
:style="{'z-index': this.zIndex}"
:style="{'z-index': zIndex}"
>
<InputHeading
:name="this.name"
:important="this.important"
:name="name"
:important="important"
icon="pencil"
></InputHeading>
<textarea
......
......@@ -14,11 +14,11 @@ export default {
<template>
<section
class="flex flex-col gap-2 bg-gray-100 p-4 drop-shadow-md"
:style="{'z-index': this.zIndex}"
:style="{'z-index': zIndex}"
>
<InputHeading
:name="this.name"
:important="this.important"
:name="name"
:important="important"
icon="pencil"
></InputHeading>
<input
......
......@@ -26,6 +26,16 @@ loadFonts([
])
export default {
components: {
Canvas,
Navbar,
MainContainer,
ImageInput,
LongTextInput,
ShortTextInput,
InputSeparator,
MultipleColorPicker
},
data () {
const predefinedColors = {
base: {
......@@ -102,7 +112,6 @@ export default {
<template>
<header>
<Navbar
headerName="Generátor grafiky"
:defaultTemplate="TEMPLATES.basic_photo_banner"
></Navbar>
</header>
......
......@@ -13,11 +13,10 @@ import Navbar from '../../components/Navbar.vue'
import MainContainer from '../../components/MainContainer.vue'
import ImageInput from '../../components/inputs/ImageInput.vue'
import LongTextInput from '../../components/inputs/text/LongTextInput.vue'
import ShortTextInput from '../../components/inputs/text/ShortTextInput.vue'
import EmojiInput from '../../components/inputs/EmojiInput.vue'
import InputSeparator from '../../components/inputs/InputSeparator.vue'
import MultipleColorPicker from '../../components/inputs/colors/MultipleColorPicker.vue'
import ShortTextInput from '../../components/inputs/text/ShortTextInput.vue'
</script>
<script>
......@@ -28,6 +27,17 @@ loadFonts([
])
export default {
components: {
Canvas,
Navbar,
MainContainer,
ImageInput,
LongTextInput,
ShortTextInput,
EmojiInput,
InputSeparator,
MultipleColorPicker
},
data () {
const predefinedColors = {
base: {
......@@ -110,7 +120,6 @@ export default {
<template>
<header>
<Navbar
headerName="Generátor grafiky"
:defaultTemplate="TEMPLATES.basic_photo_banner"
></Navbar>
</header>
......
......@@ -27,6 +27,16 @@ loadFonts([
])
export default {
components: {
Canvas,
Navbar,
MainContainer,
ImageInput,
LongTextInput,
ShortTextInput,
InputSeparator,
MultipleColorPicker
},
data () {
const predefinedColors = {
base: {
......@@ -107,7 +117,6 @@ export default {
<template>
<header>
<Navbar
headerName="Generátor grafiky"
:defaultTemplate="TEMPLATES.newspaper_quote_bottom"
></Navbar>
</header>
......
......@@ -27,6 +27,16 @@ loadFonts([
])
export default {
components: {
Canvas,
Navbar,
MainContainer,
ImageInput,
LongTextInput,
ShortTextInput,
InputSeparator,
MultipleColorPicker
},
data () {
const predefinedColors = {
base: {
......@@ -110,7 +120,6 @@ export default {
<template>
<header>
<Navbar
headerName="Generátor grafiky"
:defaultTemplate="TEMPLATES.newspaper_quote_middle"
></Navbar>
</header>
......
......@@ -20,6 +20,14 @@ import MultipleColorPicker from '../../components/inputs/colors/MultipleColorPic
loadFonts(['12px Bebas Neue'])
export default {
components: {
Canvas,
Navbar,
MainContainer,
ImageInput,
LongTextInput,
MultipleColorPicker
},
data () {
const predefinedColors = {
base: {
......@@ -77,7 +85,6 @@ export default {
<template>
<header>
<Navbar
headerName="Generátor grafiky"
:defaultTemplate="TEMPLATES.text_banner"
></Navbar>
</header>
......
......@@ -24,6 +24,14 @@ loadFonts([
])
export default {
components: {
Canvas,
Navbar,
MainContainer,
ImageInput,
LongTextInput,
MultipleColorPicker
},
data () {
const predefinedColors = {
base: {
......@@ -77,7 +85,6 @@ export default {
<template>
<header>
<Navbar
headerName="Generátor grafiky"
:defaultTemplate="TEMPLATES.urgent_text_banner"
></Navbar>
</header>
......
......@@ -14,5 +14,5 @@ export default defineConfig({
},
build: {
assetsDir: 'static'
},
}
})
__pycache__/
server/static/*
.venv
.env
OIDC_RP_REALM_URL="http://localhost:8080/realms/master/"
OIDC_RP_CLIENT_ID=generator
OIDC_RP_CLIENT_SECRET=VCn4LVAUc6RGLSup7VaAKsmrKUbWguaP
ALLOWED_OIDC_GROUPS="cen:f,cen:regp"
SITE_URL="http://localhost:8006"
SECRET_KEY=Åìo«ÑÚ2ûÁn-Û?bV4«Û©ä´ó>°yÆvw7°Ôa
JWT_SECRET_KEY=¤2¯µ&ñðxÈF?a^µ#udbLxgЧ?ÅÏARA®D
JWT_EXPIRES_AFTER=172800
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment