1 Commits

Author SHA1 Message Date
dm
84081876e4 update puppeteer to version 8.0.0
space thumbnails use background-size: cover
2021-03-23 23:57:16 +01:00
23 changed files with 288 additions and 853 deletions

View File

@@ -1,44 +0,0 @@
variables:
CONTAINER_IMAGE: git.universe.io:4567/$CI_PROJECT_PATH
DOCKER_HOST: tcp://docker:2376
stages:
- build
- deploy_dev
- deploy
build:
stage: build
image: docker:stable
services:
- docker:19.03.12-dind
variables:
DOCKER_TLS_CERTDIR: "/certs"
script:
- docker image build -t $CONTAINER_IMAGE:$CI_BUILD_REF -t $CONTAINER_IMAGE:latest .
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN git.universe.io:4567
- docker image push $CONTAINER_IMAGE:latest
- docker image push $CONTAINER_IMAGE:$CI_BUILD_REF
only:
- mnt
- custom/freiwerkb
deploy_dev:
stage: deploy
image: alpine
script:
- apk add --update curl
- curl -XPOST $WWW_WEBHOOK
only:
- mnt
- custom/freiwerkb
deploy:
when: manual
stage: deploy
image: alpine
script:
- apk add --update curl
- |
curl -XPOST -K - <<URL
$WWW_WEBHOOKS
URL
only:
- master
- custom/freiwerkb

19
.vscode/launch.json vendored
View File

@@ -4,26 +4,11 @@
{ {
"type": "node", "type": "node",
"request": "launch", "request": "launch",
"name": "Launch debug", "name": "Nodemon",
"runtimeExecutable": "${workspaceFolder}/node_modules/nodemon/bin/nodemon.js", "runtimeExecutable": "${workspaceFolder}/node_modules/nodemon/bin/nodemon.js",
"skipFiles": ["<node_internals>/**"], "skipFiles": ["<node_internals>/**"],
"program": "${workspaceFolder}/spacedeck.js", "program": "${workspaceFolder}/spacedeck.js",
"cwd": "${workspaceFolder}", "cwd": "${workspaceFolder}"
"env": {
"NODE_APP_INSTANCE" :"dev"
}
},
{
"type": "node",
"request": "launch",
"name": "Launch ldap",
"runtimeExecutable": "${workspaceFolder}/node_modules/nodemon/bin/nodemon.js",
"skipFiles": ["<node_internals>/**"],
"program": "${workspaceFolder}/spacedeck.js",
"cwd": "${workspaceFolder}",
"env": {
"NODE_APP_INSTANCE" :"ldap"
}
} }
] ]
} }

View File

@@ -1,8 +0,0 @@
# Changelog
## [X.X.X] - 2021-03-23
### Changes
- Replaced phantomjs with puppeteer #169
- Create Hungarian language pack #174

View File

@@ -12,7 +12,7 @@ We appreciate filed issues, pull requests and general discussion.
# Features # Features
- Create virtual whiteboards called _Spaces_ with virtually unlimited size - Create virtual whiteboards called *Spaces* with virtually unlimited size
- Drag & drop images, videos and audio from your computer or the web - Drag & drop images, videos and audio from your computer or the web
- Write and format text with full control over fonts, colors and style - Write and format text with full control over fonts, colors and style
- Draw, annotate and highlight with included graphical shapes - Draw, annotate and highlight with included graphical shapes
@@ -37,7 +37,7 @@ Spacedeck requires:
To run Spacedeck, you only need Node.JS 10.x. To run Spacedeck, you only need Node.JS 10.x.
To install all node dependencies, run (do this once) after cloning the repository: To install all node dependencies, run (do this once):
npm install npm install
@@ -45,6 +45,7 @@ To install all node dependencies, run (do this once) after cloning the repositor
See [config/default.json](config/default.json). Set `storage_local_path` for a local sqlite database or `storage_region`, `storage_bucket`, `storage_cdn` and `storage_endpoint` for AWS S3. `mail_provider` may be one of `console` or `smtp`. Also, omit a trailing `/` for the `endpoint`. See [config/default.json](config/default.json). Set `storage_local_path` for a local sqlite database or `storage_region`, `storage_bucket`, `storage_cdn` and `storage_endpoint` for AWS S3. `mail_provider` may be one of `console` or `smtp`. Also, omit a trailing `/` for the `endpoint`.
## Disable DB logs ## Disable DB logs
```json ```json
@@ -60,7 +61,6 @@ Add a custom array of swatches to your config/default.json.
**You should include the swatch transparent (rgba(0,0,0,0)) so users can remove the color applied.** **You should include the swatch transparent (rgba(0,0,0,0)) so users can remove the color applied.**
## Configure default colors ## Configure default colors
You can define text, stroke and fill color in your config/default.json. You can define text, stroke and fill color in your config/default.json.
**You also should include the default colors in your custom swatches palette.** **You also should include the default colors in your custom swatches palette.**
@@ -107,8 +107,8 @@ For advanced media conversion:
# Data Storage # Data Storage
By default, media files are uploaded to the `storage` folder. By default, media files are uploaded to the ```storage``` folder.
The database is stored in `database.sqlite` by default. The database is stored in ```database.sqlite``` by default.
# Other databases (Not officially supported) # Other databases (Not officially supported)
@@ -129,12 +129,16 @@ Adapt the other values as needed
"storage_password": "password", "storage_password": "password",
``` ```
# Run with Docker # Run with Docker
- configure `config/default.json` - configure `config/default.json`
- adapt your `docker-compose.yml` if needed. - configure `volumes` section inside `docker-compose.yml`
- start the container with `docker-compose up` - point to `database.sqlite` on the host system
(use `-d` for background process and `--build` for rebuilding the image) - `touch database.sqlite` if it not exists
- point to `storage/` on the host system
- `mkdir storage/` if it not exists
- start the container with `sudo docker-compose up -f docker-compose.yml -d --build`
# Hacking # Hacking

View File

@@ -15,7 +15,7 @@
"storage_password": "password", "storage_password": "password",
"storage_local_path": "./storage", "storage_local_path": "./storage",
"storage_local_db": "./database/database.sqlite", "storage_local_db": "./database.sqlite",
"storage_region": "eu-central-1", "storage_region": "eu-central-1",
"storage_endpoint": "http://localhost:4572", "storage_endpoint": "http://localhost:4572",
"storage_bucket": "my_spacedeck_bucket", "storage_bucket": "my_spacedeck_bucket",

View File

View File

@@ -1,4 +1,5 @@
version: "2.0" version: "2.0"
services: services:
spacedeck: spacedeck:
build: . build: .
@@ -6,5 +7,6 @@ services:
ports: ports:
- "9666:9666" - "9666:9666"
volumes: volumes:
- ./storage:/app/storage - /absolute/path/to/storage:/app/storage
- ./database:/app/database - /absolute/path/to/database.sqlite:/app/database.sqlite

View File

@@ -12,7 +12,7 @@ server {
listen 80; listen 80;
listen [::]:80; listen [::]:80;
server_name spacedeck.domain.de servername spacedeck.domain.de
return 301 https://$server_name$request_uri; return 301 https://$server_name$request_uri;
} }

View File

@@ -39,8 +39,7 @@ module.exports = {
await page.emulateMediaType('screen'); await page.emulateMediaType('screen');
if (type=="pdf") { if (type=="pdf") {
let margin = 2; await page.pdf({path: export_path, printBackground: true, width: space.width+'px', height: space.height+'px' });
await page.pdf({path: export_path, printBackground: true, width: space.width+margin+'px', height: space.height+margin+'px' });
}else{ }else{
await page.screenshot({path: export_path, printBackground: true}); await page.screenshot({path: export_path, printBackground: true});
} }

View File

@@ -1,328 +0,0 @@
{
"ok": "Rendben",
"cancel": "Mégse",
"close": "Bezárás",
"open": "Megnyitás",
"folder": "Mappa",
"save": "Mentés",
"saved": "Mentve",
"created": "létrehozva",
"duplicate": "Másolás",
"delete": "Törlés",
"remove": "Eltávolítás",
"set": "készlet",
"reset": "alaphelyzet",
"thanks": "Köszönöm",
"share": "Megosztás",
"signup": "Feliratkozás",
"login": "Bejelentkezés",
"logout": "Kijelentkezés",
"email": "E-mail-cím",
"password": "Jelszó",
"width": "Szélesség",
"height": "Magasság",
"nick": "Név",
"role": "Szerepkör",
"members": "Tagok",
"actions": "Műveletek",
"or": "vagy",
"you": "Ön",
"via": "ezen keresztül:",
"by": "szerző:",
"zero": "Nulla",
"page": "Oldal:",
"new": "Új",
"copy": "Másolás",
"home": "Kezdőoldal",
"owner": "Tulajdonos",
"space": "Hely",
"second": "másodperc",
"not_found": "Nem található.",
"untitled_space": "Névtelen hely",
"untitled_folder": "Névtelen mappa",
"untitled": "névtelen",
"sure": "Biztos vagy benne?",
"specify": "Kérjük, részletezze",
"confirm": "Erősítse meg a műveletet",
"error_unknown_email": "Ez az e-mail/jelszó kombináció ismeretlen.",
"error_password_confirmation": "A megadott jelszavak nem egyeznek.",
"error_domain_blocked": "Tartománya letiltva.",
"error_user_email_already_used": "Ez az e-mail cím már használatban van.",
"support": "Spacedeck támogatás",
"offline": "Kapcsolat nélküli üzemmód. Kattintson további információkért.",
"error": "Sajnálom, de valami rosszul ment. Kérjük, lépjen kapcsolatba a support@spacedeck.com-al",
"welcome": "Üdvözöljük",
"claim": "A digitális rajztáblája.",
"trynow": "Próbálja most.",
"about": "Rólunk",
"terms": "Feltételek",
"contact": "Kapcsolat",
"privacy": "Adatvédelem",
"business_adress": "Üzleti cím",
"post_adress": "Posta cím",
"phone": "Telefon",
"ceo": "Ügyvezető igazgató",
"name": "Név",
"confirm_subject": "Spacedeck e-mail megerősítés",
"confirm_body": "Köszönjük, hogy feliratkozott a Spacedeck-re.\nKérjük, hogy kattintson az alábbi linkre az e-mail cím megerősítéséhez.\n",
"confirm_action": "Erősítse meg most",
"team_invite_membership_subject": "Csapat meghívó %-s számára",
"team_invite_membership_body": "Meghívták a(z) %s oldalra a Spacedeck-en. Kattintson a következő hivatkozásra a meghívás elfogadásához.",
"team_invite_user_body": "Meghívták a(z)%s oldalra a Spacedeck-en.\nAz ideiglenes jelszó \"%s\".\n Kérjük, kattintson a következő hivatkozásra a meghívás elfogadásához.",
"team_invite_admin_body": "%s meghívást kapott a csapatodba: %s. Az ideiglenes jelszó \"%s\".",
"team_invite_membership_acction": "Elfogad",
"team_new_member_subject": "A(z) %s új csapattagja feliratkozott",
"team_new_member_body": "%s most csatlakozott a(z) %s csoporthoz a Spacedeck-en.",
"space_invite_membership_subject": "%s meghívott %s helyre",
"space_invite_membership_body": "%s meghívta, hogy csatlakozzon a(z) %s helyre a Spacedecken. Kattintson a következő linkre a meghívás elfogadásához.",
"space_invite_membership_action": "Elfogad",
"folder_invite_membership_subject": "Hely",
"folder_invite_membership_body": "Meghívták a Spacedeck csoportjába. Kérjük, hogy kattintson a következő linkre a meghívás elfogadásához.",
"folder_invite_membership_acction": "Elfogad",
"login_google": "Bejelentkezés a Google-al",
"save_changes": "Változtatások mentése",
"upgrade": "Frissítés",
"upgrade_now": "Frissítés most",
"create_space": "Hely létrehozása",
"create_folder": "Mappa létrehozása",
"email_unconfirmed": "E-mail nincs megerősítve",
"confirmation_sent": "E-mail elküldve",
"folder_filter": "Szűrő",
"sort_by": "Rendezés",
"last_modified": "Utoljára módosítva",
"last_opened": "Utoljára nyitva",
"title": "Cím",
"edit_team": "Csapat szerkesztése",
"edit_account": "Fiók szerkesztése",
"log_out": "Kijelentkezés",
"no_spaces_yet": "Isten hozta! Itt létrehozhat helyeket és mappákat a bal felső sarokban található gombokkal.",
"new_folder_title": "Új cím a mappához",
"folder_settings": "Mappa beállításai",
"upload_cover_image": "Borító kép feltöltése",
"spacedeck_pro_ad_folders": "A Spacedeck Pro segítségével korlátlan mennyiségű helyet foglalhat el a mappákban és kezelheti az egyes mappák hozzáférési vezérléseit. Szeretne többet megtudni a Pro funkcióiról?",
"spacedeck_pro_ad_versions": "A Spacedeck Pro segítségével korlátlan verziókat menthet az egyes helyekről, hogy nyomon kövesse az előrehaladást vagy biztonságban tartsa a pillanatképeket. Szeretne többet megtudni a Pro funkcióiról?",
"spacedeck_pro_ad_pdf": "A Spacedeck Pro segítségével a helyeket éles PDF-fájlokként exportálhatja archiváláshoz, postázáshoz vagy nyomtatáshoz. Szeretne többet megtudni a Pro funkcióiról?",
"spacedeck_pro_ad_zip": "A Spacedeck Pro segítségével exportálhatja a hely tartalmát ZIP-csomagként. Szeretne többet megtudni a Pro funkcióiról?",
"spacedeck_pro_ad_colors": "A Spacedeck Pro segítségével professzionális színválasztóval keverheti össze saját színeit.",
"profile_caption": "Profil",
"upload_avatar": "Avatar feltöltése",
"uploading_avatar": "Avatar feltöltése…",
"avatar_dimensions": "Ajánlott méretek: 200 × 200 képpont.",
"profile_name": "Név",
"profile_email": "E-mail cím",
"send_again": "Küldje újra",
"confirmation_sent_long": "E-mail megerősítő hivatkozáds elküldve.Kérjük, ellenőrizze a beérkező leveleket.",
"confirmation_sent_another": "Egy másik megerősítő link elküldve.",
"confirmation_sent_dialog_text": "E-mailt küldtünk Önnek, amelyben elmagyaráztuk, hogyan erősítse meg e-mail címét.",
"payment_caption": "Fizetés",
"language_caption": "Nyelv",
"notifications_caption": "Értesítések",
"notifications_option_chat": "E-mailben értesítsen az új megjegyzésekről",
"notifications_option_spaces": "Küldjön napi összefoglalót arról, hogy mi történt a helyeim és mappáim között",
"password_caption": "Jelszó",
"current_password": "Jelenlegi jelszó",
"new_password": "Új jelszó",
"verify_password": "Jelszó megerősítése",
"change_password": "Jelszó módosítása",
"reset_password": "Jelszó visszaállítása",
"terminate_caption": "Fiók törlése",
"terminate_warning": "Ha törli a fiókját, akkor az összes hely, mappa és üzenet, beleértve az Ön összes tartalmát és a helyeiben létrehozott más embereket megsemmisül.",
"terminate_warning2": "Ezt nem lehet visszavonni.",
"terminate_reason": "Üzenet",
"terminate_reason_caption": "Segítsen nekünk a fejlesztésben, ha megosztja a lemondás okait.",
"terminate_terminate": "Leállít",
"space_blank1": "Üdvözöljük egy friss, új helyen!",
"space_blank2": "Húzza ide a fájlokat, hivatkozások beillesztése",
"space_blank3": "vagy használja az alábbi eszközöket",
"space_blank4": "hogy ezt a helyet tartalommal töltse meg.",
"draft": "Piszkozat",
"publish": "Közzététel",
"published": "Közzétett",
"save_version": "Verzió mentése",
"version_saved": "Verzió mentve",
"post": "Üzenet küldése",
"chat_invite_cta1": "Az együttműködés szórakoztató!",
"chat_invite_cta2": "Miért ne",
"chat_invite_cta3": "hívjon meg néhány embert",
"chat_invite_cta4": "Önnel dolgozni?",
"chat_message_placeholder": "Írja meg az üzenetét…",
"view": "Nézet",
"edit": "Szerkesztés",
"present": "Jelen van",
"chat": "Csevegés",
"meta": "Meta",
"tool_search": "Keresés",
"tool_upload": "Feltöltés",
"tool_text": "Szöveg",
"tool_shape": "Forma",
"tool_zones": "Zónák",
"tool_canvas": "Vászon",
"search_media": "Keresés a médiában…",
"type_here": "Írja ide",
"text_formats": "Formátumok",
"format_p": "Bekezdés",
"format_bullets": "Listajeles lista",
"format_numbers": "Számozott lista",
"format_h1": "1. címsor",
"format_h2": "2. címsor",
"format_h3": "3. címsor",
"font_size": "Betűméret",
"line_height": "Sormagasság",
"tool_align": "Igazítás",
"tool_styles": "Stílusok",
"tool_bullets": "Felsorolás",
"tool_numbers": "Számok",
"tool_font": "Betűtípus",
"color_fill": "Kitöltés",
"color_stroke": "Vonás",
"color_text": "Szöveg",
"tool_type": "Típus",
"tool_box": "Doboz",
"tool_link": "Hivatkozás",
"tool_layout": "Elrendezés",
"tool_options": "Lehetőségek",
"tool_stroke": "Vonás ",
"tool_delete": "Törlés",
"tool_lock": "Lezár",
"tool_copy": "Másol",
"stack": "Halom",
"tool_circle": "Kör",
"tool_hexagon": "Hatszög",
"tool_square": "Négyzet",
"tool_diamond": "Gyémánt",
"tool_bubble": "Buborék",
"tool_cloud": "Felhő",
"tool_burst": "Sorozatfelvétel",
"tool_star": "Csillag",
"tool_heart": "Szív",
"tool_scribble": "Irkál",
"tool_line": "Vonal",
"tool_arrow": "Nyíl",
"search_media_placeholder": "Keresés az internetes médiában…",
"add_zone": "Új zóna",
"palette": "Paletta",
"picker": "Választó",
"background_image_caption": "Kép",
"background_color_caption": "Szín",
"upload_background_caption": "Kattintson egy háttérkép feltöltéséhez",
"upload_background": "Háttér feltöltése",
"access_caption": "Hozzáférés",
"versions_caption": "Verziók",
"info_caption": "Információ",
"mode_private": "Magán: Csak a tagok tekinthetik meg és szerkeszthetik",
"mode_public": "Nyilvános: A hivatkozás birtokában bárki megtekintheti",
"invite_collaborators": "Hívjon meg együttműködőket",
"revoke_access": "Hozzáférés visszavonása",
"invite": "Meghívók küldése",
"invitee_email_address": "Az új tag e-mail címe",
"optional_message": "Választható üzenet",
"role_viewer": "Néző",
"role_editor": "Szerkesztő",
"role_admin": "Adminisztrátor",
"new_space_title": "Új cím a helynek",
"team": "Csoport",
"search": "Keresés",
"search_no_results": "keresés_nincsenek_eredmények",
"search_clear": "keresés_törlés",
"rename": "Átnevezés",
"mobile": "mobil",
"image": "kép",
"tool_filter": "szűrő",
"canel": "mégse",
"invite_membership_action": "meghívni_tagságot",
"viewer": "néző",
"editor": "szerkesztő",
"admin": "adminisztrátor ",
"logging_in": "bejelentkezés",
"password_confirmation": "Jelszó megerősítése",
"confirm_again": "E-mailt küldtünk Önnek, amelyben elmagyaráztuk, hogyan erősítse meg e-mail címét.",
"confirmed": "Fiókját sikeresen megerősítettük. Köszönjük.",
"signing_up": "Feliratkozás",
"password_check_inbox": "Kérjük, ellenőrizze a beérkező leveleket",
"new_space": "Új hely",
"tool_more": "Több",
"what_is_your_name": "Üdvözöljük a %s oldalon! Kérjük, hogy válasszon egy felhasználónevet.",
"lang": "hu",
"landing_title": "Rajztáblája az interneten.",
"landing_claim": "A Spacedeck segítségével könnyedén kombinálhat mindenféle típusú médiát a virtuális rajztáblákon: szöveges jegyzeteket, fotókat, internetes linkeket, sőt videókat és hangfelvételeket.",
"landing_example": "Az emberek a Spacedeck segítségével szervezik ötleteiket, csoportokban, hogy egy pillantással teljes projekteket láthassanak vagy iskolákban és egyetemeken gazdagabb, összekapcsolt tanulási tapasztalatokkal.",
"spaces": "Saját helyek",
"access_editor_link": "Azonnali hivatkozás szerkesztése",
"access_editor_link_desc": "Adja meg ezt a hivatkozást mindenkinek, akinek képesnek kell lennie a hely azonnali szerkesztésére, nincs szükség fiókra:",
"access_editor_link_desc_slug": "Ez a hivatkozás tartalmazza a hely nevét is.",
"access_anonymous_edit_blocking": "Névtelen szerkesztők csak a saját tételeiket változtathatják meg",
"access_current_members": "Current Members",
"access_new_members": "Új tagok meghívása",
"access_no_members": "A Hely tagjai itt jelennek meg.",
"comments": "hozzászólások",
"landing_customers": "Ezrek bíznak benne.",
"landing_features_title": "Gyerekjáték használni.",
"landing_features_text": "Az új Spacedeck 5 korszerű, gyönyörű felhasználói felülettel rendelkezik, amely minden eddiginél könnyebbé és szórakoztatóbbá teszi munkáját - miközben még erőteljesebb funkciókat kínál:",
"landing_features_1": "<b>Fogd és vidd</b> képeket, videókat és hangokat a számítógépről vagy az internetről",
"landing_features_2": "<b>Szöveg írása és formázása</b> de a betűtípusok, a színek és a stílus teljes ellenőrzésével",
"landing_features_3": "<b>Rajzoljon, kommentáljon és jelöljön ki</b> a mellékelt grafikus alakzatokkal",
"landing_features_4": "</b>Kapcsolja tábláját <b>nagyító prezentációvá</b>",
"landing_features_5": "<b>Együttműködés és csevegés</b> valós időben csoport társaival, diákjaival vagy barátaival. ",
"landing_features_6": "<b>Helyek megosztása</b> az interneten vagy e-mailben",
"landing_features_7": "<b>Exportálja munkáját</b> nyomtatható PDF vagy ZIP formátumban",
"landing_pricing": "Hihetetlenül megfizethető.",
"landing_pricing_lite": "Ingyenes/személyes használat",
"landing_pricing_lite_text": "Az alap, átfogó verzió a képek gyűjtésére és a jegyzetek vezetésére.",
"landing_pricing_pro_features_list": "<ul><li>Korlátlan helyek</li><li>Mappa struktúrák</li><li>PDF és ZIP exportálás</li><li>Nincs vízjel</li><li>Egyéni hátterek</li><li>Tevékenység előzmények</li><li>20 GB tárhely</li><ul>",
"landing_pricing_pro": "€4,90/Felhasználó/hónap. <br><small>or 49,90/Felhasználó /év</small>",
"landing_pricing_pro_text": "Turbófeltöltve minden elvárt erővel.",
"landing_pricing_pro_features": "Turbófeltöltve minden elvárt erővel.",
"welcome_subject": "Üdvözöljük a Spacedeck-en",
"welcome_body": "Üdvözlet!\nKöszönjük, hogy feliratkozott a Spacedeck webhelyre.<br>Reméljük, hogy élvezni fogja a Helyek szolgáltatásban való munkát.<br>Ne feledje, hogy fiókjában korlátlan számú munkatárs található. Nyugodtan ossza meg helyeit barátaival és kollégáival a világ minden tájáról.",
"invite_emails": "E-mail címek (vesszővel elválasztva)",
"history_recently_updated": "Mostanában frissítve",
"history_recently_empty": "Még nem történt semmi.",
"parent_folder": "szülő_mappa",
"created_by": "Készítette",
"last_updated": "Utolsó frissítés",
"feedback_sent": "Köszönjük a visszajelzését!",
"role_member": "Tag",
"team_invite_membership_action": "Meghívás elfogadása",
"space_message_subject": "Új üzenet a következő helyen % s",
"space_message_body": "%s ezt írta %s-ban: \n",
"pro_ad_history_headline": "A Spacedeck Pro verzióra való frissítéskor itt láthatja az összes (megosztott) hely legújabb frissítésének előzményeit.",
"password_reset_subject": "Spacedeck jelszavának visszaállítása",
"password_reset_body": "Ön kérte a Spacedeck jelszavának visszaállítását.\n Kérjük, hogy kattintson a következő hivatkozásra az új jelszó beállításához.",
"password_reset_action": "Visszaállítás most",
"was_offline": "A Spacedeck-hez való kapcsolat megszakadt. Ha nem mentett munkája van, kérjük, tartsa nyitva ezt a böngészőfület a kapcsolat helyreállításáig, majd érintse meg újra a nem mentett objektumokat.",
"subscription_failed_user_subject": "Probléma a Spacedeck fizetésével",
"subscription_failed_user_body": "Sajnos nem tudtuk feldolgozni a fizetési módját. A fiók beállításokban könnyedén létrehozhat egy új fizetési módot, beleértve a PayPalt is.",
"subscription_failed_team_subject": "Probléma a Spacedeck fizetésével",
"subscription_failed_team_body": "Sajnos nem tudtuk feldolgozni a fizetési módját a Team-fiókjához. Kérjük, javítsa ki fizetési módját a lehető leghamarabb.",
"team_name": "Csoport név",
"subdomain": "altartomány",
"team_adresses": "E-mail címek",
"add": "Hozzáadás",
"invited": "meghívott",
"duplicate_destination": "Melyik mappába kívánja másolni ezt a helyet?",
"duplicate_confirm": "A(z)% s másolat% s-ra?",
"duplicate_success": "% s másolva lett% s-ra.",
"goto_space": "Lépjen a(z)% s helyre",
"goto_folder": "Lépjen a(z)% s mappába",
"stay_here": "Maradjon itt",
"sharing": "Megosztás",
"list": "Lista exportálása",
"link": "Hivatkozás",
"download_space": "Hely letöltése ",
"download_as_pdf": "Hely letöltése PDF formátumban",
"type": "Típus",
"download": "Letöltés",
"Previous Zone": "Előző zóna",
"Next Zone": "Következő zóna",
"promote": "Népszerűsít",
"demote": "Lefokoz",
"more": "Több",
"lock": "Lezár",
"unlock": "Felold",
"follow_present": "Követ",
"mute_present": "Követés megszüntetése",
"follow_present_help": "Ha valaki más mutatja be ezt a helyet, a többi tag automatikusan követi az előadást. Ezzel a gombbal kapcsolhatja be vagy ki a követést.",
"export": "Exportál",
"media": "Média",
"tool_edit_text": "Szöveg szerkesztése"
}

View File

@@ -244,7 +244,7 @@
"what_is_your_name": "La benvenguda a %s! Mercés de causir un escais-nom.", "what_is_your_name": "La benvenguda a %s! Mercés de causir un escais-nom.",
"lang": "en", "lang": "en",
"landing_title": "Vòstre tablèu blanc sul Web.", "landing_title": "Vòstre tablèu blanc sul Web.",
"landing_claim": "Spacedeck vos permet de facilament combinar quin tipe que siá de mèdias sus un tablèu virtual: tèxte, nòtas, ligams web, amai vidèos e enregistraments àudio. ", "landing_claim": "Spacedeck vos permet de facilament combinar quin que siá tipe de mèdias sus un tablèu virtual: tèxte, nòtas, ligams web, amai vidèos e enregistraments àudio. ",
"landing_example": "Lo monde utiliza Spacedeck per organizar lors idèas, en equipa per veire totes los projèctes en una ulhada, a lescòla e a luniversitat pels mai rics, experiéncia daprendissatge connectat.", "landing_example": "Lo monde utiliza Spacedeck per organizar lors idèas, en equipa per veire totes los projèctes en una ulhada, a lescòla e a luniversitat pels mai rics, experiéncia daprendissatge connectat.",
"spaces": "Mos espacis", "spaces": "Mos espacis",
"access_editor_link": "Ligam de modificacion dirècta", "access_editor_link": "Ligam de modificacion dirècta",

View File

@@ -1,22 +1,22 @@
"use strict"; 'use strict';
const db = require("../models/db"); const db = require('../models/db');
var config = require("config"); var config = require('config');
module.exports = (req, res, next) => { module.exports = (req, res, next) => {
// authentication via API token // authentication via API token
const api_token = req.headers["x-spacedeck-api-token"]; const api_token = req.headers["x-spacedeck-api-token"];
if (api_token && api_token.length > 7) { if (api_token && api_token.length>7) {
db.User.findOne({ where: { api_token: api_token } }).then((user) => { db.User.findOne({where: {api_token: api_token}}).then(user => {
if (user) {
req.user = user; req.user = user;
next(); next();
} else { }).error(err => {
res.status(403).json({ res.status(403).json({
error: "invalid_api-token", "error": "invalid_api-token"
}); });
} next();
}); });
return; return;
@@ -26,29 +26,28 @@ module.exports = (req, res, next) => {
const token = req.cookies["sdsession"]; const token = req.cookies["sdsession"];
if (token && token != "null" && token != null) { if (token && token != "null" && token != null) {
db.Session.findOne({ where: { token: token } }) db.Session.findOne({where: {token: token}})
.then((session) => { .then(session => {
if (!session) { if (!session) {
// session not found // session not found
next(); next();
} else }
db.User.findOne({ where: { _id: session.user_id } }).then((user) => { else db.User.findOne({where: {_id: session.user_id}})
.then(user => {
if (!user) { if (!user) {
var domain = var domain = (process.env.NODE_ENV == "production") ? new URL(config.get('endpoint')).hostname : req.headers.hostname;
process.env.NODE_ENV == "production" res.clearCookie('sdsession', { domain: domain });
? new URL(config.get("endpoint")).hostname
: req.headers.hostname;
res.clearCookie("sdsession", { domain: domain });
if (req.accepts("text/html")) { if (req.accepts("text/html")) {
res.send("Please clear your cookies and try again."); res.send("Please clear your cookies and try again.");
} else if (req.accepts("application/json")) { } else if (req.accepts('application/json')) {
res.status(403).json({ res.status(403).json({
error: "token_not_found", "error": "token_not_found"
}); });
} else { } else {
res.send("Please clear your cookies and try again."); res.send("Please clear your cookies and try again.");
} }
} else { } else {
req["token"] = token; req["token"] = token;
req["user"] = user; req["user"] = user;
@@ -56,11 +55,11 @@ module.exports = (req, res, next) => {
} }
}); });
}) })
.error((err) => { .error(err => {
console.error("Session resolve error", err); console.error("Session resolve error",err);
next(); next();
}); });
} else { } else {
next(); next();
} }
}; }

371
package-lock.json generated
View File

@@ -24,6 +24,11 @@
"resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-1.0.6.tgz", "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-1.0.6.tgz",
"integrity": "sha512-Xqg/lIZMrUd0VRmSRbCAewtwGZiAk3mEUDvV4op1tGl+LvyPcb/MIOSxTl9z+9+J+R4/vpjiCAT4xeKzH9ji1w==" "integrity": "sha512-Xqg/lIZMrUd0VRmSRbCAewtwGZiAk3mEUDvV4op1tGl+LvyPcb/MIOSxTl9z+9+J+R4/vpjiCAT4xeKzH9ji1w=="
}, },
"@types/mime-types": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.0.tgz",
"integrity": "sha1-nKUs2jY/aZxpRmwqbM2q2RPqenM="
},
"@types/node": { "@types/node": {
"version": "14.14.7", "version": "14.14.7",
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.7.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.7.tgz",
@@ -53,12 +58,9 @@
} }
}, },
"agent-base": { "agent-base": {
"version": "6.0.2", "version": "5.1.1",
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz",
"integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g=="
"requires": {
"debug": "4"
}
}, },
"ajv": { "ajv": {
"version": "6.12.6", "version": "6.12.6",
@@ -1035,14 +1037,6 @@
"supports-color": "^5.3.0" "supports-color": "^5.3.0"
} }
}, },
"chargebee": {
"version": "2.6.5",
"resolved": "https://registry.npmjs.org/chargebee/-/chargebee-2.6.5.tgz",
"integrity": "sha512-h11cxGXN+6I47F0Ncj7pemnYO05kLm/vOKPK9mcvdU6K/HByNI/ArlvOLLhpFqjrePfTyCmBTqDYWgYjMP3uJg==",
"requires": {
"q": ">=1.0.1"
}
},
"cheerio": { "cheerio": {
"version": "0.22.0", "version": "0.22.0",
"resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz",
@@ -1286,11 +1280,6 @@
"integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
"dev": true "dev": true
}, },
"colorette": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz",
"integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w=="
},
"combined-stream": { "combined-stream": {
"version": "1.0.8", "version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
@@ -1663,11 +1652,6 @@
"resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
"integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="
}, },
"deepmerge": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
"integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg=="
},
"default-compare": { "default-compare": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz",
@@ -1778,11 +1762,6 @@
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
"integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups="
}, },
"devtools-protocol": {
"version": "0.0.854822",
"resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.854822.tgz",
"integrity": "sha512-xd4D8kHQtB0KtWW0c9xBZD5LVtm9chkMOfs/3Yn01RhT/sFIsVtzTtypfKoFfWBaL+7xCYLxjOLkhwPXaX/Kcg=="
},
"dom-serializer": { "dom-serializer": {
"version": "0.1.1", "version": "0.1.1",
"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz",
@@ -2374,15 +2353,6 @@
} }
} }
}, },
"find-up": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
"integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
"requires": {
"locate-path": "^5.0.0",
"path-exists": "^4.0.0"
}
},
"findup-sync": { "findup-sync": {
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz",
@@ -2511,13 +2481,26 @@
"integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="
}, },
"fs-extra": { "fs-extra": {
"version": "7.0.1", "version": "0.6.4",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.6.4.tgz",
"integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "integrity": "sha1-9G8MdbeEH40gCzNIzU1pHVoJnRU=",
"requires": { "requires": {
"graceful-fs": "^4.1.2", "jsonfile": "~1.0.1",
"jsonfile": "^4.0.0", "mkdirp": "0.3.x",
"universalify": "^0.1.0" "ncp": "~0.4.2",
"rimraf": "~2.2.0"
},
"dependencies": {
"mkdirp": {
"version": "0.3.5",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz",
"integrity": "sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc="
},
"rimraf": {
"version": "2.2.8",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz",
"integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI="
}
} }
}, },
"fs-minipass": { "fs-minipass": {
@@ -3153,9 +3136,9 @@
} }
}, },
"hosted-git-info": { "hosted-git-info": {
"version": "2.8.9", "version": "2.8.8",
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz",
"integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==",
"dev": true "dev": true
}, },
"hpkp": { "hpkp": {
@@ -3227,11 +3210,11 @@
} }
}, },
"https-proxy-agent": { "https-proxy-agent": {
"version": "5.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz",
"integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==",
"requires": { "requires": {
"agent-base": "6", "agent-base": "5",
"debug": "4" "debug": "4"
} }
}, },
@@ -3263,9 +3246,9 @@
"dev": true "dev": true
}, },
"ignore-walk": { "ignore-walk": {
"version": "3.0.4", "version": "3.0.3",
"resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz",
"integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==",
"requires": { "requires": {
"minimatch": "^3.0.4" "minimatch": "^3.0.4"
} }
@@ -3317,9 +3300,9 @@
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
}, },
"ini": { "ini": {
"version": "1.3.8", "version": "1.3.5",
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
"integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw=="
}, },
"interpret": { "interpret": {
"version": "1.4.0", "version": "1.4.0",
@@ -3679,12 +3662,9 @@
"integrity": "sha1-BUNS5MTIDIbAkjh31EneF2pzLI0=" "integrity": "sha1-BUNS5MTIDIbAkjh31EneF2pzLI0="
}, },
"jsonfile": { "jsonfile": {
"version": "4.0.0", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-1.0.1.tgz",
"integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", "integrity": "sha1-6l7+QLg2kLmGZ2FKc5L8YOhCwN0="
"requires": {
"graceful-fs": "^4.1.6"
}
}, },
"jsprim": { "jsprim": {
"version": "1.4.1", "version": "1.4.1",
@@ -3718,11 +3698,6 @@
"integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
"dev": true "dev": true
}, },
"klona": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz",
"integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA=="
},
"last-run": { "last-run": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz",
@@ -3826,18 +3801,10 @@
"strip-bom": "^2.0.0" "strip-bom": "^2.0.0"
} }
}, },
"locate-path": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
"integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
"requires": {
"p-locate": "^4.1.0"
}
},
"lodash": { "lodash": {
"version": "4.17.21", "version": "4.17.20",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA=="
}, },
"lodash.assignin": { "lodash.assignin": {
"version": "4.2.0", "version": "4.2.0",
@@ -4169,20 +4136,12 @@
"integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A=="
}, },
"mock-aws-s3": { "mock-aws-s3": {
"version": "4.0.2", "version": "2.6.0",
"resolved": "https://registry.npmjs.org/mock-aws-s3/-/mock-aws-s3-4.0.2.tgz", "resolved": "https://registry.npmjs.org/mock-aws-s3/-/mock-aws-s3-2.6.0.tgz",
"integrity": "sha512-J6g3MMCuKHeuqVEOgvQfRGIfVmg6KKrED48Bux/L9rTY3NPK9TFRh/9bCf5AuzjJm9PIlwhDEO99tD8+smnTyQ==", "integrity": "sha512-eZVouXl5EKoXSDX/TRyVsIg9MXBnlL60iPBpF5XPOEMPtpftLc57nLDjqtNkWyRhTjn3jWc/oP0TaAgXv5bYKA==",
"requires": { "requires": {
"bluebird": "^3.5.1", "fs-extra": "0.6.4",
"fs-extra": "^7.0.1", "underscore": "1.8.3"
"underscore": "1.12.1"
},
"dependencies": {
"underscore": {
"version": "1.12.1",
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz",
"integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw=="
}
} }
}, },
"moment": { "moment": {
@@ -4246,11 +4205,6 @@
"resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz",
"integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==" "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ=="
}, },
"nanoid": {
"version": "3.1.23",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz",
"integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw=="
},
"nanomatch": { "nanomatch": {
"version": "1.2.13", "version": "1.2.13",
"resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
@@ -4270,10 +4224,15 @@
"to-regex": "^3.0.1" "to-regex": "^3.0.1"
} }
}, },
"ncp": {
"version": "0.4.2",
"resolved": "https://registry.npmjs.org/ncp/-/ncp-0.4.2.tgz",
"integrity": "sha1-q8xsvT7C7Spyn/bnwfqPAXhKhXQ="
},
"needle": { "needle": {
"version": "2.6.0", "version": "2.5.2",
"resolved": "https://registry.npmjs.org/needle/-/needle-2.6.0.tgz", "resolved": "https://registry.npmjs.org/needle/-/needle-2.5.2.tgz",
"integrity": "sha512-KKYdza4heMsEfSWD7VPUIz3zX2XDwOyX2d+geb4vrERZMT5RMU6ujjaD+I5Yr54uZxQ2w6XRTAhHBbSCyovZBg==", "integrity": "sha512-LbRIwS9BfkPvNwNHlsA41Q29kL2L/6VaOJ0qisM5lLWsTV3nP15abO5ITL6L81zqFhzjRKDAYjpcBcwM0AVvLQ==",
"requires": { "requires": {
"debug": "^3.2.6", "debug": "^3.2.6",
"iconv-lite": "^0.4.4", "iconv-lite": "^0.4.4",
@@ -4281,9 +4240,9 @@
}, },
"dependencies": { "dependencies": {
"debug": { "debug": {
"version": "3.2.7", "version": "3.2.6",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
"integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
"requires": { "requires": {
"ms": "^2.1.1" "ms": "^2.1.1"
} }
@@ -4306,11 +4265,6 @@
"resolved": "https://registry.npmjs.org/nocache/-/nocache-2.1.0.tgz", "resolved": "https://registry.npmjs.org/nocache/-/nocache-2.1.0.tgz",
"integrity": "sha512-0L9FvHG3nfnnmaEQPjT9xhfN4ISk0A8/2j4M37Np4mcDesJjHgEUfgPhdCyZuFI954tjokaIj/A3NdpFNdEh4Q==" "integrity": "sha512-0L9FvHG3nfnnmaEQPjT9xhfN4ISk0A8/2j4M37Np4mcDesJjHgEUfgPhdCyZuFI954tjokaIj/A3NdpFNdEh4Q=="
}, },
"node-fetch": {
"version": "2.6.1",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
"integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw=="
},
"node-gyp": { "node-gyp": {
"version": "3.8.0", "version": "3.8.0",
"resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz",
@@ -4382,9 +4336,9 @@
}, },
"dependencies": { "dependencies": {
"glob": { "glob": {
"version": "7.1.7", "version": "7.1.6",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
"integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
"requires": { "requires": {
"fs.realpath": "^1.0.0", "fs.realpath": "^1.0.0",
"inflight": "^1.0.4", "inflight": "^1.0.4",
@@ -4495,9 +4449,9 @@
} }
}, },
"nodemailer": { "nodemailer": {
"version": "6.6.0", "version": "4.7.0",
"resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.6.0.tgz", "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-4.7.0.tgz",
"integrity": "sha512-ikSMDU1nZqpo2WUPE0wTTw/NGGImTkwpJKDIFPZT+YvvR9Sj+ze5wzu95JHkBMglQLoG2ITxU21WukCC/XsFkg==" "integrity": "sha512-IludxDypFpYw4xpzKdMAozBSkzKHmNBvGanUREjJItgJ2NYcK/s8+PggVhj7c2yGFQykKsnnmv1+Aqo0ZfjHmw=="
}, },
"nodemon": { "nodemon": {
"version": "2.0.7", "version": "2.0.7",
@@ -4678,9 +4632,9 @@
} }
}, },
"npm-bundled": { "npm-bundled": {
"version": "1.1.2", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz",
"integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==",
"requires": { "requires": {
"npm-normalize-package-bin": "^1.0.1" "npm-normalize-package-bin": "^1.0.1"
} }
@@ -4933,22 +4887,16 @@
"version": "2.3.0", "version": "2.3.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
"integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
"dev": true,
"requires": { "requires": {
"p-try": "^2.0.0" "p-try": "^2.0.0"
} }
}, },
"p-locate": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
"integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
"requires": {
"p-limit": "^2.2.0"
}
},
"p-try": { "p-try": {
"version": "2.2.0", "version": "2.2.0",
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
"integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
"dev": true
}, },
"package-json": { "package-json": {
"version": "6.5.0", "version": "6.5.0",
@@ -5024,11 +4972,6 @@
"integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
"dev": true "dev": true
}, },
"path-exists": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
"integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="
},
"path-is-absolute": { "path-is-absolute": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
@@ -5108,14 +5051,6 @@
"pinkie": "^2.0.0" "pinkie": "^2.0.0"
} }
}, },
"pkg-dir": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
"integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
"requires": {
"find-up": "^4.0.0"
}
},
"plugin-error": { "plugin-error": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz",
@@ -5135,19 +5070,27 @@
"dev": true "dev": true
}, },
"postcss": { "postcss": {
"version": "8.2.15", "version": "7.0.35",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.15.tgz", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
"integrity": "sha512-2zO3b26eJD/8rb106Qu2o7Qgg52ND5HPjcyQiK2B98O388h43A448LCslC0dI2P97wCAQRJsFvwTRcXxTKds+Q==", "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
"requires": { "requires": {
"colorette": "^1.2.2", "chalk": "^2.4.2",
"nanoid": "^3.1.23", "source-map": "^0.6.1",
"source-map": "^0.6.1" "supports-color": "^6.1.0"
}, },
"dependencies": { "dependencies": {
"source-map": { "source-map": {
"version": "0.6.1", "version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
},
"supports-color": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
"integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
"requires": {
"has-flag": "^3.0.0"
}
} }
} }
}, },
@@ -5250,35 +5193,35 @@
} }
}, },
"puppeteer": { "puppeteer": {
"version": "8.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-8.0.0.tgz", "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-3.0.0.tgz",
"integrity": "sha512-D0RzSWlepeWkxPPdK3xhTcefj8rjah1791GE82Pdjsri49sy11ci/JQsAO8K2NRukqvwEtcI+ImP5F4ZiMvtIQ==", "integrity": "sha512-ArmIS8w+XhL4KGP05kxMousA9SFxmeirMkNNcVe5LjK4iGCbZ8qKnG4byuXMru7Ty7a9QwiMUIf80X+zmJuf2A==",
"requires": { "requires": {
"@types/mime-types": "^2.1.0",
"debug": "^4.1.0", "debug": "^4.1.0",
"devtools-protocol": "0.0.854822",
"extract-zip": "^2.0.0", "extract-zip": "^2.0.0",
"https-proxy-agent": "^5.0.0", "https-proxy-agent": "^4.0.0",
"node-fetch": "^2.6.1", "mime": "^2.0.3",
"pkg-dir": "^4.2.0", "mime-types": "^2.1.25",
"progress": "^2.0.1", "progress": "^2.0.1",
"proxy-from-env": "^1.1.0", "proxy-from-env": "^1.0.0",
"rimraf": "^3.0.2", "rimraf": "^3.0.2",
"tar-fs": "^2.0.0", "tar-fs": "^2.0.0",
"unbzip2-stream": "^1.3.3", "unbzip2-stream": "^1.3.3",
"ws": "^7.2.3" "ws": "^7.2.3"
}, },
"dependencies": { "dependencies": {
"ws": { "mime": {
"version": "7.4.5", "version": "2.5.0",
"resolved": "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz", "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.0.tgz",
"integrity": "sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==" "integrity": "sha512-ft3WayFSFUVBuJj7BMLKAQcSlItKtfjsKDDsii3rqFDAZ7t11zRe8ASw/GlmivGwVUYtwkQrxiGGpL6gFvB0ag=="
}
}
}, },
"q": { "ws": {
"version": "1.5.1", "version": "7.4.3",
"resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.3.tgz",
"integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" "integrity": "sha512-hr6vCR76GsossIRsr8OLR9acVVm1jyfEWvhbNjtgPOrfvAlKzvyeg/P6r8RuDjRyrcQoPQT7K0DGEPc7Ae6jzA=="
}
}
}, },
"qs": { "qs": {
"version": "6.7.0", "version": "6.7.0",
@@ -5668,9 +5611,9 @@
}, },
"dependencies": { "dependencies": {
"glob": { "glob": {
"version": "7.1.7", "version": "7.1.6",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
"integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
"requires": { "requires": {
"fs.realpath": "^1.0.0", "fs.realpath": "^1.0.0",
"inflight": "^1.0.4", "inflight": "^1.0.4",
@@ -5702,77 +5645,64 @@
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
}, },
"sanitize-html": { "sanitize-html": {
"version": "2.3.3", "version": "1.27.5",
"resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.3.3.tgz", "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-1.27.5.tgz",
"integrity": "sha512-DCFXPt7Di0c6JUnlT90eIgrjs6TsJl/8HYU3KLdmrVclFN4O0heTcVbJiMa23OKVr6aR051XYtsgd8EWwEBwUA==", "integrity": "sha512-M4M5iXDAUEcZKLXkmk90zSYWEtk5NH3JmojQxKxV371fnMh+x9t1rqdmXaGoyEHw3z/X/8vnFhKjGL5xFGOJ3A==",
"requires": { "requires": {
"deepmerge": "^4.2.2", "htmlparser2": "^4.1.0",
"escape-string-regexp": "^4.0.0", "lodash": "^4.17.15",
"htmlparser2": "^6.0.0",
"is-plain-object": "^5.0.0",
"klona": "^2.0.3",
"parse-srcset": "^1.0.2", "parse-srcset": "^1.0.2",
"postcss": "^8.0.2" "postcss": "^7.0.27"
}, },
"dependencies": { "dependencies": {
"dom-serializer": { "dom-serializer": {
"version": "1.3.1", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.1.tgz", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.1.0.tgz",
"integrity": "sha512-Pv2ZluG5ife96udGgEDovOOOA5UELkltfJpnIExPrAk1LTvecolUGn6lIaoLh86d83GiB86CjzciMd9BuRB71Q==", "integrity": "sha512-ox7bvGXt2n+uLWtCRLybYx60IrOlWL/aCebWJk1T0d4m3y2tzf4U3ij9wBMUb6YJZpz06HCCYuyCDveE2xXmzQ==",
"requires": { "requires": {
"domelementtype": "^2.0.1", "domelementtype": "^2.0.1",
"domhandler": "^4.0.0", "domhandler": "^3.0.0",
"entities": "^2.0.0" "entities": "^2.0.0"
} }
}, },
"domelementtype": { "domelementtype": {
"version": "2.2.0", "version": "2.0.2",
"resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.2.tgz",
"integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" "integrity": "sha512-wFwTwCVebUrMgGeAwRL/NhZtHAUyT9n9yg4IMDwf10+6iCMxSkVq9MGCVEH+QZWo1nNidy8kNvwmv4zWHDTqvA=="
}, },
"domhandler": { "domhandler": {
"version": "4.2.0", "version": "3.3.0",
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz",
"integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", "integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==",
"requires": { "requires": {
"domelementtype": "^2.2.0" "domelementtype": "^2.0.1"
} }
}, },
"domutils": { "domutils": {
"version": "2.6.0", "version": "2.4.2",
"resolved": "https://registry.npmjs.org/domutils/-/domutils-2.6.0.tgz", "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.4.2.tgz",
"integrity": "sha512-y0BezHuy4MDYxh6OvolXYsH+1EMGmFbwv5FKW7ovwMG6zTPWqNPq3WF9ayZssFq+UlKdffGLbOEaghNdaOm1WA==", "integrity": "sha512-NKbgaM8ZJOecTZsIzW5gSuplsX2IWW2mIK7xVr8hTQF2v1CJWTmLZ1HOCh5sH+IzVPAGE5IucooOkvwBRAdowA==",
"requires": { "requires": {
"dom-serializer": "^1.0.1", "dom-serializer": "^1.0.1",
"domelementtype": "^2.2.0", "domelementtype": "^2.0.1",
"domhandler": "^4.2.0" "domhandler": "^3.3.0"
} }
}, },
"entities": { "entities": {
"version": "2.2.0", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz",
"integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w=="
},
"escape-string-regexp": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
"integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="
}, },
"htmlparser2": { "htmlparser2": {
"version": "6.1.0", "version": "4.1.0",
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz",
"integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", "integrity": "sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==",
"requires": { "requires": {
"domelementtype": "^2.0.1", "domelementtype": "^2.0.1",
"domhandler": "^4.0.0", "domhandler": "^3.0.0",
"domutils": "^2.5.2", "domutils": "^2.0.0",
"entities": "^2.0.0" "entities": "^2.0.0"
} }
},
"is-plain-object": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
"integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q=="
} }
} }
}, },
@@ -5901,9 +5831,9 @@
} }
}, },
"y18n": { "y18n": {
"version": "4.0.3", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
"integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
"dev": true "dev": true
}, },
"yargs": { "yargs": {
@@ -6926,9 +6856,9 @@
} }
}, },
"underscore": { "underscore": {
"version": "1.13.1", "version": "1.8.3",
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",
"integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g==" "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI="
}, },
"undertaker": { "undertaker": {
"version": "1.3.0", "version": "1.3.0",
@@ -6990,11 +6920,6 @@
"crypto-random-string": "^2.0.0" "crypto-random-string": "^2.0.0"
} }
}, },
"universalify": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
"integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="
},
"unpipe": { "unpipe": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
@@ -7447,9 +7372,9 @@
"integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
}, },
"y18n": { "y18n": {
"version": "3.2.2", "version": "3.2.1",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
"integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
"dev": true "dev": true
}, },
"yallist": { "yallist": {

View File

@@ -15,7 +15,6 @@
"async": "2.3.0", "async": "2.3.0",
"bcryptjs": "2.4.3", "bcryptjs": "2.4.3",
"body-parser": "^1.19.0", "body-parser": "^1.19.0",
"chargebee": "2.6.5",
"cheerio": "0.22.0", "cheerio": "0.22.0",
"config": "1.25.1", "config": "1.25.1",
"cookie-parser": "~1.4.3", "cookie-parser": "~1.4.3",
@@ -28,21 +27,21 @@
"helmet": "^3.5.0", "helmet": "^3.5.0",
"i18n-2": "0.6.3", "i18n-2": "0.6.3",
"log-timestamp": "latest", "log-timestamp": "latest",
"mock-aws-s3": "^4.0.2", "mock-aws-s3": "^2.6.0",
"moment": "^2.19.3", "moment": "^2.19.3",
"morgan": "^1.9.1", "morgan": "^1.9.1",
"nodemailer": "^6.6.0", "nodemailer": "^4.6.7",
"puppeteer": "8.0.0", "puppeteer": "8.0.0",
"read-chunk": "^2.1.0", "read-chunk": "^2.1.0",
"request": "^2.88.0", "request": "^2.88.0",
"sanitize-html": "^2.3.3", "sanitize-html": "^1.11.1",
"sequelize": "^4.37.6", "sequelize": "^4.37.6",
"serve-favicon": "~2.4.2", "serve-favicon": "~2.4.2",
"serve-static": "^1.13.1", "serve-static": "^1.13.1",
"slug": "^1.1.0", "slug": "^1.1.0",
"sqlite3": "^4.2.0", "sqlite3": "^4.0.0",
"umzug": "^2.1.0", "umzug": "^2.1.0",
"underscore": "^1.13.1", "underscore": "1.8.3",
"uuid": "^3.2.1", "uuid": "^3.2.1",
"validator": "7.0.0", "validator": "7.0.0",
"ws": "3.3.1" "ws": "3.3.1"

View File

@@ -8,8 +8,6 @@ var SpacedeckSections = {
data: { data: {
MAX_COLUMNS: 20, MAX_COLUMNS: 20,
isShift: false,
redo_stack: [], redo_stack: [],
undo_stack: [], undo_stack: [],
@@ -64,7 +62,7 @@ var SpacedeckSections = {
active_style: { active_style: {
border_radius: 0, border_radius: 0,
stroke: 2, stroke: 0,
font_family: "Inter", font_family: "Inter",
font_size: 36, font_size: 36,
line_height: 1.5, line_height: 1.5,
@@ -208,9 +206,7 @@ var SpacedeckSections = {
Mousetrap.bind('shift+left', function(evt) { this.if_editable(function() {this.nudge_selected_artifacts(-10,0,evt);}) }.bind(this)); Mousetrap.bind('shift+left', function(evt) { this.if_editable(function() {this.nudge_selected_artifacts(-10,0,evt);}) }.bind(this));
Mousetrap.bind('shift+right', function(evt) { this.if_editable(function() {this.nudge_selected_artifacts(10,0,evt);}) }.bind(this)); Mousetrap.bind('shift+right', function(evt) { this.if_editable(function() {this.nudge_selected_artifacts(10,0,evt);}) }.bind(this));
Mousetrap.bind('space', function(evt) { this.activate_pan_tool(evt); }.bind(this)); Mousetrap.bind('space', function(evt) { this.activate_pan_tool(evt); }.bind(this));
Mousetrap.bind(['shift'], function(evt) { this.isShift = true; }.bind(this), 'keydown');
Mousetrap.bind(['shift'], function(evt) { this.isShift = false; }.bind(this), 'keyup');
Mousetrap.bind('shift+up', function(evt) { this.if_editable(function() {this.nudge_selected_artifacts(0,-10,evt);}) }.bind(this));
$(document).bind("beforecopy", this.handle_onbeforecopy.bind(this)); $(document).bind("beforecopy", this.handle_onbeforecopy.bind(this));
$(window).bind("beforeunload", this.handle_onunload.bind(this)); $(window).bind("beforeunload", this.handle_onunload.bind(this));
$(window).bind("resize", this.handle_window_resize.bind(this)); $(window).bind("resize", this.handle_window_resize.bind(this));
@@ -1360,7 +1356,7 @@ var SpacedeckSections = {
}, },
reset_stroke: function() { reset_stroke: function() {
this.active_style.stroke = 2; this.active_style.stroke = 0;
this.active_style.border_radius = 0; this.active_style.border_radius = 0;
this.active_style.stroke_style = "solid"; this.active_style.stroke_style = "solid";
}, },
@@ -1718,7 +1714,7 @@ var SpacedeckSections = {
h: h, h: h,
stroke_color: this.active_style.stroke_color, stroke_color: this.active_style.stroke_color,
text_color: this.active_style.text_color, text_color: this.active_style.text_color,
stroke: this.active_style.stroke, stroke: 0,
fill_color: this.active_style.fill_color, fill_color: this.active_style.fill_color,
shape: shape_type, shape: shape_type,
valign: "middle", valign: "middle",
@@ -2296,7 +2292,6 @@ var SpacedeckSections = {
for (var i=0; i<parsed.length; i++) { for (var i=0; i<parsed.length; i++) {
if (parsed[i].mime) { if (parsed[i].mime) {
var z = this.highest_z()+1; var z = this.highest_z()+1;
if(!this.isShift) {
if (parsed.length==1) { if (parsed.length==1) {
var w = parsed[i].w; var w = parsed[i].w;
var h = parsed[i].h; var h = parsed[i].h;
@@ -2305,11 +2300,10 @@ var SpacedeckSections = {
parsed[i].y = point.y; parsed[i].y = point.y;
parsed[i].z = point.z; parsed[i].z = point.z;
} else { } else {
parsed[i].x = parsed[i].x+100; parsed[i].x = parsed[i].x+50;
parsed[i].y = parsed[i].y+100; parsed[i].y = parsed[i].y+50;
parsed[i].y = parsed[i].z+z; parsed[i].y = parsed[i].z+z;
} }
}
this.clone_artifact(parsed[i], 0,0, function(a) { this.clone_artifact(parsed[i], 0,0, function(a) {
this.multi_select([a]); this.multi_select([a]);
}.bind(this)); }.bind(this));

View File

@@ -99,7 +99,7 @@ var SpacedeckSpaces = {
}.bind(this), {value: dft || "Guest "+parseInt(10000*Math.random()), ok: __("ok"), cancel: __("cancel")}); }.bind(this), {value: dft || "Guest "+parseInt(10000*Math.random()), ok: __("ok"), cancel: __("cancel")});
}, },
load_space: function(space_id, on_success, on_error) { load_space: function(space_id, on_success, on_error, space_auth) {
this.folder_spaces_filter=""; this.folder_spaces_filter="";
this.folder_spaces_search=""; this.folder_spaces_search="";
@@ -308,8 +308,7 @@ var SpacedeckSpaces = {
userReady(); userReady();
} }
if (!this.user.nickname && space_auth) { if (!this.user && space_auth) {
this.guest_nickname = get_query_param("nickname") || this.guest_nickname;
if (this.guest_nickname) { if (this.guest_nickname) {
userReady(); userReady();
} else { } else {

View File

@@ -130,27 +130,9 @@ SpacedeckUsers = {
$event.stopPropagation(); $event.stopPropagation();
} }
create_user(name, email, password, password_confirmation, invite_code, function(res) { create_user(name, email, password, password_confirmation, invite_code, function(session) {
this.creating_user = false; this.creating_user = false;
if (res.chargebee_checkout) {
var chargebeeInstance = Chargebee.init({
site: "spacedeck-test",
enableRedirectMode: true,
enableFriendbuyTracking: false
});
chargebeeInstance.openCheckout({
hostedPage: function() {
return new Promise(function(resolve, reject) {
resolve(res.chargebee_checkout);
})
}
});
} else {
// user created, login
this.login_submit(email, password, null, on_success); this.login_submit(email, password, null, on_success);
}
}.bind(this), function(req) { }.bind(this), function(req) {
this.creating_user = false; this.creating_user = false;
try { try {

View File

@@ -23,8 +23,6 @@ var express = require('express');
var router = express.Router(); var router = express.Router();
var glob = require('glob'); var glob = require('glob');
var chargebee = require('chargebee');
router.get('/current', function(req, res, next) { router.get('/current', function(req, res, next) {
if (req.user) { if (req.user) {
var u = _.clone(req.user.dataValues); var u = _.clone(req.user.dataValues);
@@ -41,32 +39,35 @@ router.get('/current', function(req, res, next) {
} }
}); });
function createChargebeeCheckout(req, res, plan_id, email, name, company) { // create user
var nameParts = name.split(" "); router.post('/', function(req, res) {
var firstName = nameParts.shift(); if (!req.body["email"] || !req.body["password"]) {
var lastName = nameParts.join(" "); res.status(400).json({"error":"email or password missing"});
return;
chargebee.hosted_page.checkout_new({
subscription: {
plan_id: plan_id
},
customer: {
first_name: firstName,
last_name: lastName,
email: email,
company: company,
} }
}).request(function(error,result) {
if (error) {
console.log(error);
res.status(400).json({"error":error+""});
} else {
res.status(200).json({"chargebee_checkout":result.hosted_page});
}
});
};
function createUser(req, res, email, nickname, password) { var email = req.body["email"].toLowerCase();
var nickname = req.body["nickname"];
var password = req.body["password"];
var password_confirmation = req.body["password_confirmation"];
var invite_code = req.body["invite_code"];
if (password_confirmation != password) {
res.status(400).json({"error":"password_confirmation"});
return;
}
if (config.invite_code && invite_code != config.invite_code) {
res.status(400).json({"error":"Invalid Invite Code."});
return;
}
if (!validator.isEmail(email)) {
res.status(400).json({"error":"email_invalid"});
return;
}
var createUser = function() {
bcrypt.genSalt(10, function(err, salt) { bcrypt.genSalt(10, function(err, salt) {
bcrypt.hash(password, salt, function(err, hash) { bcrypt.hash(password, salt, function(err, hash) {
crypto.randomBytes(16, function(ex, buf) { crypto.randomBytes(16, function(ex, buf) {
@@ -121,48 +122,12 @@ function createUser(req, res, email, nickname, password) {
}); });
}); });
}); });
}; };
// create user
router.post('/', function(req, res) {
if (!req.body["email"] || !req.body["password"]) {
res.status(400).json({"error":"email or password missing"});
return;
}
var email = req.body["email"].toLowerCase();
var nickname = req.body["nickname"];
var password = req.body["password"];
var password_confirmation = req.body["password_confirmation"];
var invite_code = req.body["invite_code"];
var company = req.body["company"] || "";
if (password_confirmation != password) {
res.status(400).json({"error":"password_confirmation"});
return;
}
if (config.invite_code && invite_code != config.invite_code) {
res.status(400).json({"error":"Invalid Invite Code."});
return;
}
if (!validator.isEmail(email)) {
res.status(400).json({"error":"email_invalid"});
return;
}
db.User.findAll({where: {email: email}}) db.User.findAll({where: {email: email}})
.then(users => { .then(users => {
if (users.length == 0) { if (users.length == 0) {
if (config.get('chargebee_integration')) { createUser();
// sign up via paid plan trial
createChargebeeCheckout(req, res, config.get('chargebee_default_plan_id'), email, nickname, company);
// TODO: createUser after chargebee checkout
}
else {
createUser(req, res, email, nickname, password);
}
} else { } else {
res.status(400).json({"error":"user_email_already_used"}); res.status(400).json({"error":"user_email_already_used"});
} }

View File

@@ -78,22 +78,6 @@ router.get('/oc', (req, res) => {
res.redirect("/t/oc"); res.redirect("/t/oc");
}); });
router.get('/es/*', (req, res) => {
res.redirect("/t/es");
});
router.get('/es', (req, res) => {
res.redirect("/t/es");
});
router.get('/hu/*', (req, res) => {
res.redirect("/t/hu");
});
router.get('/hu', (req, res) => {
res.redirect("/t/hu");
});
router.get('/en/*', (req, res) => { router.get('/en/*', (req, res) => {
res.redirect("/t/en"); res.redirect("/t/en");
}); });
@@ -103,7 +87,7 @@ router.get('/en', (req, res) => {
}); });
router.get('/account', (req, res) => { router.get('/account', (req, res) => {
res.render('spacedeck', { config:config }); res.render('spacedeck');
}); });
router.get('/login', (req, res) => { router.get('/login', (req, res) => {

View File

@@ -23,8 +23,6 @@ const express = require('express');
const app = express(); const app = express();
const serveStatic = require('serve-static'); const serveStatic = require('serve-static');
const chargebee = require('chargebee');
const isProduction = app.get('env') === 'production'; const isProduction = app.get('env') === 'production';
// workaround for libssl_conf.so error triggered by phantomjs // workaround for libssl_conf.so error triggered by phantomjs
@@ -35,7 +33,7 @@ console.log("Booting Spacedeck Open… (environment: " + app.get('env') + ")");
app.use(logger(isProduction ? 'combined' : 'dev')); app.use(logger(isProduction ? 'combined' : 'dev'));
i18n.expressBind(app, { i18n.expressBind(app, {
locales: ["de", "en", "es", "fr", "hu", "oc"], locales: ["en", "de", "fr", "oc", "es"],
defaultLocale: "en", defaultLocale: "en",
cookieName: "spacedeck_locale", cookieName: "spacedeck_locale",
devMode: (app.get('env') == 'development') devMode: (app.get('env') == 'development')
@@ -112,14 +110,6 @@ if (app.get('env') == 'development') {
module.exports = app; module.exports = app;
// ChargeBee Integration (Optional)
if (config.get('chargebee_integration')) {
chargebee.configure({
site: config.get('chargebee_site'),
api_key: config.get('chargebee_api_key')
});
}
// CONNECT TO DATABASE // CONNECT TO DATABASE
db.init(); db.init();

View File

@@ -3,12 +3,7 @@
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<title>Spacedeck Open</title> <title>Spacedeck Open</title>
<meta name="title" content="Spacedeck Open"> <meta name="description" content="">
<meta name="description" content="Whenever you need to lay out pictures, text notes, video and audio clips on a blank canvas, Spacedeck can help you."/>
<meta name="keywords" content="spacedeck, collaboration, teams, collages, moodboards, teaching, shared whiteboards, design thinking"/>
<meta name="author" content="MNT Research GmbH"/>
<meta name="copyright" content="MNT Research GmbH"/>
<meta name="robots" content="index,follow"/>
<meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" /> <meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<meta name="apple-mobile-web-app-capable" content="yes"> <meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" /> <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
@@ -29,5 +24,6 @@
<a class="btn btn-md btn-dark btn-round" href="/spaces"><%=__("spaces")%></a> <a class="btn btn-md btn-dark btn-round" href="/spaces"><%=__("spaces")%></a>
<a class="btn btn-md btn-dark btn-round" href="/logout"><%=__("logout")%></a> <a class="btn btn-md btn-dark btn-round" href="/logout"><%=__("logout")%></a>
<% } %> <% } %>
</div> </div>
</header> </header>

View File

@@ -111,9 +111,6 @@
<label class="radio" v-bind:class="{checked: user.prefs_language=='es'}" v-on:click="save_user_language('es')"> <label class="radio" v-bind:class="{checked: user.prefs_language=='es'}" v-on:click="save_user_language('es')">
<input type="radio" id="user-preferences_language" name="language" value="es"><span>Español</span> <input type="radio" id="user-preferences_language" name="language" value="es"><span>Español</span>
</label> </label>
<label class="radio" v-bind:class="{checked: user.prefs_language=='hu'}" v-on:click="save_user_language('hu')">
<input type="radio" id="user-preferences_language" name="language" value="hu"><span>Magyar</span>
</label>
</div> </div>
</div> </div>

View File

@@ -18,7 +18,7 @@
webEndpoint: location.origin, webEndpoint: location.origin,
apiEndpoint: location.origin, apiEndpoint: location.origin,
websocketsEndpoint: location.origin.replace("https:","wss:").replace("http:","ws:"), websocketsEndpoint: location.origin.replace("https:","wss:").replace("http:","ws:"),
options: <%- config && config.spacedeck ? JSON.stringify(config.spacedeck) : "{}" %> options: <%- config.spacedeck ? JSON.stringify(config.spacedeck) : "{}" %>
}; };
</script> </script>
@@ -57,9 +57,6 @@
<script src="/javascripts/spacedeck_directives.js"></script> <script src="/javascripts/spacedeck_directives.js"></script>
<script src="/javascripts/spacedeck_vue.js"></script> <script src="/javascripts/spacedeck_vue.js"></script>
<!-- TODO: only include based on config -->
<script src="https://js.chargebee.com/v2/chargebee.js"></script>
<script>if (window.module) module = window.module;</script> <script>if (window.module) module = window.module;</script>
</head> </head>
@@ -77,17 +74,15 @@
<script type="text/javascript"> <script type="text/javascript">
window.locales = {}; window.locales = {};
window.locales.de = {};
window.locales.en = {}; window.locales.en = {};
window.locales.es = {}; window.locales.de = {};
window.locales.fr = {}; window.locales.fr = {};
window.locales.hu = {};
window.locales.oc = {}; window.locales.oc = {};
window.locales.de.translation = <%- include("./../locales/de.js") %>; window.locales.es = {};
window.locales.en.translation = <%- include("./../locales/en.js") %>; window.locales.en.translation = <%- include("./../locales/en.js") %>;
window.locales.es.translation = <%- include("./../locales/es.js") %>; window.locales.de.translation = <%- include("./../locales/de.js") %>;
window.locales.fr.translation = <%- include("./../locales/fr.js") %>; window.locales.fr.translation = <%- include("./../locales/fr.js") %>;
window.locales.hu.translation = <%- include("./../locales/hu.js") %>;
window.locales.oc.translation = <%- include("./../locales/oc.js") %>; window.locales.oc.translation = <%- include("./../locales/oc.js") %>;
window.locales.es.translation = <%- include("./../locales/es.js") %>;
</script> </script>
</html> </html>