Skip to content
This repository was archived by the owner on Feb 6, 2024. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
c0667c0
chore: update functions dependencies
peterpeterparker Sep 3, 2020
fc2d565
feat: add a publish action and validate user token
peterpeterparker Sep 3, 2020
dcd6a65
feat: accept only not anonymous users
peterpeterparker Sep 3, 2020
0fc36b2
feat: publish first step, convert deck in cloud
peterpeterparker Sep 4, 2020
15319b0
refactor: move split publish function
peterpeterparker Sep 4, 2020
30162c7
refactor: add try catch
peterpeterparker Sep 4, 2020
dca6382
feat: publish to API
peterpeterparker Sep 4, 2020
cee973b
feat: return API deck info
peterpeterparker Sep 4, 2020
102290c
feat: update deck after publish
peterpeterparker Sep 4, 2020
e279eb6
feat: publish deck in the cloud
peterpeterparker Sep 4, 2020
55120ae
feat: remove api presentation from studio, job is done in the cloud
peterpeterparker Sep 4, 2020
aaf3fe3
feat: add todo
peterpeterparker Sep 4, 2020
b66fc5c
fix: build
peterpeterparker Sep 4, 2020
926ed41
refactor: move files to packaces
peterpeterparker Sep 4, 2020
e50050c
feat: schedule task instead of publishing straight
peterpeterparker Sep 4, 2020
c5983c8
feat: publish when task is created
peterpeterparker Sep 4, 2020
539efd7
feat: publish to API or GitHub on task created
peterpeterparker Sep 4, 2020
b197f50
feat: add status for api and github deployment to deploy
peterpeterparker Sep 4, 2020
e615cdc
fix: update data
peterpeterparker Sep 4, 2020
03008f6
feat: publish progress logic in component according deploy api state
peterpeterparker Sep 4, 2020
a29210c
fix: owner_id always provided for deployment information
peterpeterparker Sep 4, 2020
c0f0304
chore: remove console.log
peterpeterparker Sep 4, 2020
108c36b
refactor: use firebase to resolve token
peterpeterparker Sep 4, 2020
9437f74
chore: no dev
peterpeterparker Sep 4, 2020
094dffb
feat: remove collection deploy and use deck
peterpeterparker Sep 5, 2020
30d6fcd
feat: remove collection deploy and use deck
peterpeterparker Sep 5, 2020
b31aaf1
refactor: github publish information
peterpeterparker Sep 5, 2020
c100319
fix: prerendering
peterpeterparker Sep 5, 2020
26385c7
feat: skip options
peterpeterparker Sep 5, 2020
1f803c1
chore: missing definition
peterpeterparker Sep 5, 2020
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions cloud/config/cors-studio-staging.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
[
{
"origin": [
"http://localhost:3333",
"http://localhost:3334",
"https://deckdeckgo.app",
"https://deckdeckgo-studio-staging.web.app",
"https://deckdeckgo-studio-staging.firebaseapp.com",
"https://deckdeckgo-app-staging.web.app",
"https://deckdeckgo-app-staging.firebaseapp.com"
],
"responseHeader": ["Content-Type"],
"method": ["GET"],
"maxAgeSeconds": 3600
}
]
4 changes: 4 additions & 0 deletions cloud/config/set-cloud-config-dev.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#!/bin/sh
firebase functions:config:set mailchimp.skip="true" info.mail.skip="true" github.skip="true" deckdeckgo.presentation.url="https://beta.deckdeckgo.io" deckdeckgo.api.skip="true"

firebase functions:config:get
5 changes: 5 additions & 0 deletions cloud/config/set-cors-gcp.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#!/bin/sh

# https://cloud.google.com/storage/docs/configuring-cors?hl=fr

gsutil cors set cors-studio-beta.json gs://deckdeckgo-studio-beta.appspot.com
1,666 changes: 919 additions & 747 deletions cloud/functions/package-lock.json

Large diffs are not rendered by default.

20 changes: 12 additions & 8 deletions cloud/functions/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,30 +12,34 @@
},
"main": "lib/index.js",
"dependencies": {
"firebase-admin": "^8.12.1",
"firebase-functions": "^3.7.0",
"cors": "^2.8.5",
"firebase-admin": "^9.1.1",
"firebase-functions": "^3.11.0",
"install": "^0.13.0",
"js-beautify": "^1.13.0",
"jsdom": "^16.4.0",
"mailchimp-api-v3": "^1.14.0",
"node-fetch": "^2.6.0",
"nodemailer": "^6.4.8",
"nodemailer": "^6.4.11",
"npm": "^6.14.8",
"puppeteer": "^2.1.1",
"rimraf": "^3.0.2",
"simple-git": "^2.19.0"
"simple-git": "^2.20.1"
},
"devDependencies": {
"@types/cors": "^2.8.7",
"@types/js-beautify": "^1.11.0",
"@types/jsdom": "^16.2.4",
"@types/node": "^10.17.28",
"@types/node-fetch": "^2.5.7",
"@types/nodemailer": "^6.4.0",
"@types/puppeteer": "^2.0.1",
"@types/rimraf": "^3.0.0",
"husky": "^4.2.5",
"prettier": "^2.1.0",
"pretty-quick": "^2.0.1",
"tslint": "^6.1.2",
"typescript": "^3.9.5"
"prettier": "^2.1.1",
"pretty-quick": "^3.0.0",
"tslint": "^6.1.3",
"typescript": "^4.0.2"
},
"private": true,
"engines": {
Expand Down
7 changes: 7 additions & 0 deletions cloud/functions/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ app.firestore().settings({timestampsInSnapshots: true});

import {applyWatchDeckCreate, applyWatchDeckDelete, applyWatchDeckUpdate} from './watch/watch-deck';
import {applyWatchUserCreate, applyWatchUserDelete, applyWatchUserUpdate} from './watch/watch-user';
import {applyWatchTaskCreate} from './watch/watch-task';

import {publishTask} from './request/publish';

const runtimeOpts = {
timeoutSeconds: 120,
Expand All @@ -22,6 +25,10 @@ export const watchDeckCreate = functions.firestore.document('decks/{deckId}').on

export const watchUserUpdate = functions.firestore.document('users/{userId}').onUpdate(applyWatchUserUpdate);

export const watchTaskCreate = functions.firestore.document('tasks/{taskId}').onCreate(applyWatchTaskCreate);

export const watchUserDelete = functions.auth.user().onDelete(applyWatchUserDelete);

export const watchUserCreate = functions.auth.user().onCreate(applyWatchUserCreate);

export const publish = functions.https.onRequest(publishTask);
Original file line number Diff line number Diff line change
@@ -1,6 +1,29 @@
import {firestore} from 'firebase-admin';

import {UserSocial} from './user';

export interface DeckDeployData {
status: 'scheduled' | 'failure' | 'successful';
updated_at: firestore.Timestamp;
}

export interface DeckDeploy {
github?: DeckDeployData;
api?: DeckDeployData;
}

export interface DeckGitHubRepo {
id: string;
url: string;
name: string;
nameWithOwner: string;
}

export interface DeckGitHub {
repo?: DeckGitHubRepo;
publish: boolean;
}

export interface DeckMetaAuthor {
name: string;
photo_url?: string | firestore.FieldValue;
Expand All @@ -20,13 +43,14 @@ export interface DeckMeta {
published: boolean;
published_at: firestore.Timestamp;

updated_at: firestore.Timestamp;
feed: boolean;

github?: boolean;
updated_at: firestore.Timestamp;
}

export interface DeckAttributes {
style?: string;
transition?: 'slide' | 'fade' | 'none';
}

export interface DeckClone {
Expand All @@ -39,6 +63,8 @@ export interface DeckData {

attributes?: DeckAttributes;
background?: string;
header?: string;
footer?: string;

owner_id: string;

Expand All @@ -48,6 +74,10 @@ export interface DeckData {

meta?: DeckMeta;

deploy?: DeckDeploy;

github?: DeckGitHub;

clone?: DeckClone;

created_at?: firestore.Timestamp;
Expand Down
75 changes: 75 additions & 0 deletions cloud/functions/src/model/data/slide.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
import {firestore} from 'firebase-admin';

export enum SlideTemplate {
TITLE = 'title',
CONTENT = 'content',
SPLIT = 'split',
GIF = 'gif',
AUTHOR = 'author',
YOUTUBE = 'youtube',
QRCODE = 'qrcode',
CHART = 'chart',
POLL = 'poll',
'ASPECT-RATIO' = 'aspect-ratio',
PLAYGROUND = 'playground',
}

export enum SlideChartType {
LINE = 'line',
PIE = 'pie',
BAR = 'bar',
}

export enum SlideSplitType {
DEFAULT = 'default',
DEMO = 'demo',
}

export type SlideAttributesYAxisDomain = 'max' | 'extent';

export interface SlideAttributes {
style?: string;
src?: string;
customBackground?: string;
imgSrc?: string;
imgAlt?: string;

content?: string;
customQRCode?: boolean;

type?: SlideChartType | SlideSplitType;
innerRadius?: number;
animation?: boolean;
datePattern?: string;
yAxisDomain?: SlideAttributesYAxisDomain;
smooth?: boolean;
area?: boolean;
ticks?: number;
grid?: boolean;
separator?: string;

vertical?: boolean;

imgMode?: string;

customLoader?: boolean;

theme?: string;
}

export interface SlideData {
content?: string;
template: SlideTemplate;
attributes?: SlideAttributes;

api_id?: string;

created_at?: firestore.Timestamp;
updated_at?: firestore.Timestamp;
}

export interface Slide {
id: string;
ref: firestore.DocumentReference;
data: SlideData;
}
19 changes: 19 additions & 0 deletions cloud/functions/src/model/data/task.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import {firestore} from 'firebase-admin';

export interface TaskData {
deckId: string;
token: string | firestore.FieldValue;

type: 'publish-deck' | 'push-github';

status: 'scheduled' | 'failure' | 'successful';

created_at: firestore.Timestamp;
updated_at: firestore.Timestamp;
}

export interface Task {
id: string;
ref: firestore.DocumentReference;
data: TaskData;
}
27 changes: 0 additions & 27 deletions cloud/functions/src/model/deploy.ts

This file was deleted.

8 changes: 0 additions & 8 deletions cloud/functions/src/model/slide.ts

This file was deleted.

32 changes: 32 additions & 0 deletions cloud/functions/src/request/publish.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import * as functions from 'firebase-functions';

import * as cors from 'cors';

import {verifyToken} from './utils/request-utils';

import {ScheduledPublishTask, schedulePublish} from './publish/schedule-publish-task';

export async function publishTask(request: functions.Request, response: functions.Response<any>) {
const corsHandler = cors({origin: true});

corsHandler(request, response, async () => {
const validToken: boolean = await verifyToken(request);

if (!validToken) {
response.status(400).json({
error: 'Not Authorized.',
});
return;
}

try {
const scheduledTask: ScheduledPublishTask = await schedulePublish(request);

response.json(scheduledTask);
} catch (err) {
response.status(500).json({
error: err,
});
}
});
}
Loading