Skip to content

Commit

Permalink
Set up hosting
Browse files Browse the repository at this point in the history
  • Loading branch information
Xoann committed Oct 27, 2023
1 parent 172bff2 commit 0ed7712
Show file tree
Hide file tree
Showing 62 changed files with 250 additions and 19 deletions.
5 changes: 5 additions & 0 deletions .firebaserc
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"projects": {
"default": "recipebook2-a9e9a"
}
}
19 changes: 19 additions & 0 deletions .github/workflows/firebase-hosting-merge.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# This file was auto-generated by the Firebase CLI
# https://github.com/firebase/firebase-tools

name: Deploy to Firebase Hosting on merge
'on':
push:
branches:
- main
jobs:
build_and_deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: FirebaseExtended/action-hosting-deploy@v0
with:
repoToken: '${{ secrets.GITHUB_TOKEN }}'
firebaseServiceAccount: '${{ secrets.FIREBASE_SERVICE_ACCOUNT_RECIPEBOOK2_A9E9A }}'
channelId: live
projectId: recipebook2-a9e9a
16 changes: 16 additions & 0 deletions .github/workflows/firebase-hosting-pull-request.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# This file was auto-generated by the Firebase CLI
# https://github.com/firebase/firebase-tools

name: Deploy to Firebase Hosting on PR
'on': pull_request
jobs:
build_and_preview:
if: '${{ github.event.pull_request.head.repo.full_name == github.repository }}'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: FirebaseExtended/action-hosting-deploy@v0
with:
repoToken: '${{ secrets.GITHUB_TOKEN }}'
firebaseServiceAccount: '${{ secrets.FIREBASE_SERVICE_ACCOUNT_RECIPEBOOK2_A9E9A }}'
projectId: recipebook2-a9e9a
66 changes: 66 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
firebase-debug.log*
firebase-debug.*.log*

# Firebase cache
.firebase/

# Firebase config

# Uncomment this if you'd like others to create their own Firebase project.
# For a team working on the same Firebase project(s), it is recommended to leave
# it commented so all members can deploy to the same project(s) in .firebaserc.
# .firebaserc

# Runtime data
pids
*.pid
*.seed
*.pid.lock

# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov

# Coverage directory used by tools like istanbul
coverage

# nyc test coverage
.nyc_output

# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt

# Bower dependency directory (https://bower.io/)
bower_components

# node-waf configuration
.lock-wscript

# Compiled binary addons (http://nodejs.org/api/addons.html)
build/Release

# Dependency directories
node_modules/

# Optional npm cache directory
.npm

# Optional eslint cache
.eslintcache

# Optional REPL history
.node_repl_history

# Output of 'npm pack'
*.tgz

# Yarn Integrity file
.yarn-integrity

# dotenv environment variables file
.env
10 changes: 10 additions & 0 deletions database.rules.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"rules": {
".read": "false",
".write": "false",
"$uid": {
".read": "$uid !== null",
".write": "$uid === auth.uid"
}
}
}
32 changes: 32 additions & 0 deletions firebase.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
{
"database": {
"rules": "database.rules.json"
},
"firestore": {
"rules": "firestore.rules",
"indexes": "firestore.indexes.json"
},
"hosting": {
"public": "public",
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
]
},
"storage": {
"rules": "storage.rules"
},
"remoteconfig": {
"template": "remoteconfig.template.json"
},
"emulators": {
"hosting": {
"port": 5033
},
"ui": {
"enabled": true
},
"singleProjectMode": true
}
}
4 changes: 4 additions & 0 deletions firestore.indexes.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"indexes": [],
"fieldOverrides": []
}
23 changes: 23 additions & 0 deletions firestore.rules
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
// Allow read access to all documents
match /{document=**} {
allow read;
}

// Allow write access when a user is authenticated
match /fastData/usernames {
allow write: if request.auth != null;
}
match /fastData/usernameToUid {
allow write: if request.auth != null;
}

match /users/{userId} {
allow create: if request.auth != null;
allow write: if request.auth.uid == userId;
allow read, update, delete: if request.auth != null && request.auth.uid == userId;
}
}
}
33 changes: 33 additions & 0 deletions public/404.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Page Not Found</title>

<style media="screen">
body { background: #ECEFF1; color: rgba(0,0,0,0.87); font-family: Roboto, Helvetica, Arial, sans-serif; margin: 0; padding: 0; }
#message { background: white; max-width: 360px; margin: 100px auto 16px; padding: 32px 24px 16px; border-radius: 3px; }
#message h3 { color: #888; font-weight: normal; font-size: 16px; margin: 16px 0 12px; }
#message h2 { color: #ffa100; font-weight: bold; font-size: 16px; margin: 0 0 8px; }
#message h1 { font-size: 22px; font-weight: 300; color: rgba(0,0,0,0.6); margin: 0 0 16px;}
#message p { line-height: 140%; margin: 16px 0 24px; font-size: 14px; }
#message a { display: block; text-align: center; background: #039be5; text-transform: uppercase; text-decoration: none; color: white; padding: 16px; border-radius: 4px; }
#message, #message a { box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24); }
#load { color: rgba(0,0,0,0.4); text-align: center; font-size: 13px; }
@media (max-width: 600px) {
body, #message { margin-top: 0; background: white; box-shadow: none; }
body { border-top: 16px solid #ffa100; }
}
</style>
</head>
<body>
<div id="message">
<h2>404</h2>
<h1>Page Not Found</h1>
<p>The specified file was not found on this website. Please check the URL for mistakes and try again.</p>
<h3>Why am I seeing this?</h3>
<p>This page was generated by the Firebase Command-Line Interface. To modify it, edit the <code>404.html</code> file in your project's configured <code>public</code> directory.</p>
</div>
</body>
</html>
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
45 changes: 26 additions & 19 deletions scripts/functions.js → public/scripts/functions.js
Original file line number Diff line number Diff line change
Expand Up @@ -214,17 +214,17 @@ function deleteRecipe(recipe) {
export function displayRecipes(database, type, profile = database.user) {
// Displays recipes as card in the recipe-container DOM element (class)

let noRecipes = 0;
database.getRecipeCount().then((count) => {
if (count === 0) {
noRecipes = 1;
return;
}
});
if (noRecipes === 0) {
return;
}
database.getAllRecipeNames().then((recipeNames) => {
// let noRecipes = 0;
// database.getRecipeCount().then((count) => {
// if (count === 0) {
// noRecipes = 1;
// return;
// }
// });
// if (noRecipes === 0) {
// return;
// }
database.getAllRecipeNames(profile).then((recipeNames) => {
for (let i = 0; i < recipeNames.length; i++) {
const recipeName = recipeNames[i];

Expand Down Expand Up @@ -313,27 +313,34 @@ export function displayRecipes(database, type, profile = database.user) {
createMenu(database, recipeDiv, recipeName);
} else if (type === "profile") {
Promise.all(forkPromises).then(() => {
createForkBtn(database, recipeDiv, forkRecipe, imageUrl, profile);
createForkBtn(database, recipeDiv, forkRecipe, profile);
});
}
}
});
}

function createForkBtn(database, recipeDiv, recipe, imageUrl, profile) {
function createForkBtn(database, recipeDiv, recipe, profile) {
const forkBtn = document.createElement("div");
forkBtn.classList.add("fork-btn");
forkBtn.innerHTML = "fork";
recipeDiv.appendChild(forkBtn);

forkBtn.addEventListener("click", () => {
fetch(imageUrl, { mode: "no-cors" })
.then((response) => response.blob())
.then((blob) => {
const image = new File([blob], "image.png", { type: "image/png" });
console.log(image);
database.addRecipe(recipe, blob);
database.user.getIdToken().then((token) => {
database.getRecipeImage(recipe.name, profile).then((url) => {
fetch(url, {
headers: {
Authorization: `Bearer ${token}`,
},
})
.then((response) => response.blob())
.then((blob) => {
const image = new File([blob], "image.png", { type: "image/png" });
database.addRecipe(recipe, image);
});
});
});
});
}

Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
1 change: 1 addition & 0 deletions remoteconfig.template.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{}
15 changes: 15 additions & 0 deletions storage.rules
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
rules_version = '2';

// Craft rules based on data in your Firestore database
// allow write: if firestore.get(
// /databases/(default)/documents/users/$(request.auth.uid)).data.isAdmin;
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read;
}
match /users/{userId}/{allPaths=**} {
allow read, write: if request.auth != null && request.auth.uid == userId;
}
}
}

0 comments on commit 0ed7712

Please sign in to comment.