Skip to content

Releases: weaponsforge/my-phonebook

my-phonebook_v2.1.0

03 Oct 21:33
007f01f
Compare
Choose a tag to compare

Summary

October 4, 2024

  • Feat: deploy the latest development images to Docker Hub, #142
  • Feat: pull the development images every 2 months to keep them active in the free Docker Hub account
  • Feat: allow debugging the server running in the container in VSCode
  • Fix: use actions upload/download artifact v4, #140

What's Changed

Full Changelog: v2.0.4...v2.1.0

my-phonebook_v2.0.4

14 Jul 12:16
0c370c7
Compare
Choose a tag to compare

Summary

July 14, 2024

  • Hot reload NextJS and nodemon on Docker desktop (WSL2), #137

What's Changed

Full Changelog: v2.0.3...v2.0.4

my-phonebook_v2.0.3

28 May 13:11
82589f7
Compare
Choose a tag to compare

Summary

May 28, 2023

  • When visiting the / route:
    • Redirect signed in users to the /contacts page
    • Redirect the signed-out users to the /login page
  • When visiting the login page
    • Redirect signed in users to the /contacts route
  • Set animate=true as default
  • Set the default theme to light
  • Updated / fix the useSyncLocalStorage JSON.parsing

What's Changed

Full Changelog: v2.0.2...v2.0.3

my-phonebook_v2.0.2

27 Apr 05:23
068dacc
Compare
Choose a tag to compare

Summary

April 27, 2023

NOTE: This Release completes MyPhonebook v1 Beta version

  • Fix the actionCode URL sent in the account email verification for the v2.0.1 production website by setting the production website's URL in the server's CLIENT_WEBSITE_URL env variable
  • Attach the requesting whitelisted domain's (root) origin in the CSV/PDF export API's Access-Control-Allow-Origin response header instead of the CLIENT_WEBSITE_URL variable value, #118
  • Display the resend email verification link in the /recoverPassword page
  • Append the NEXT_PUBLIC_BASE_PATH in account-related links on the production website.
  • Minor URL.createObjectURL optimizations

What's Changed

Full Changelog: v2.0.1...v2.0.2

my-phonebook_v2.0.1

25 Apr 15:52
0999d63
Compare
Choose a tag to compare

Summary

April 25, 2023

  • Update use-sync-v to v2.0.19
    • useSyncQueryV data is now cached by default
  • Cache the /contacts thumbnail photos, #115
  • Re-download an updated Contact photo thumbnail in the /contacts page

What's Changed

Full Changelog: v2.0.0...v2.0.1

my-phonebook_v2.0.0

25 Apr 12:32
6dc931b
Compare
Choose a tag to compare

Summary

April 25, 2023

  • Change password feature inside the /settings page, #30
  • Sidebar re-design
  • Export all Contacts or selected Contacts to CSV/PDF from the sidebar Download tab, #43
  • Update use-sync-v version to v2.0.16
  • Upload a Contact photo when creating a new Contact or updating an existing Contact, #39, #104
  • Delete a Contact photo along with Contact document deletion
  • Linked profile_picture_url to actual picture from firebase
  • 🆕 👉 Make Contact photos private - Store the Contact photo's Full Firebase Storage File path in the profile_picture_url field instead of the uploaded file's public Storage downloadURL
  • Display an option to resend the account verification email in the
    • /register page - when trying to register an unverified email
    • /account page - when signing in with an unverified email
  • Use a stricter set of Firebase Storage Security Rules for Contact photo uploads, #50
  • Display user-friendly generic Firebase permissions error messages when uploading Contact photos and creating/updating Contact documents
  • Fix page errors in the /account?mode=resend_email_verification and mode=resetPassword pages

Firebase Storage Rules Updates

  • Photo Image File Specifications
    • The new Storage Rules accepts image files of type .jpg, .jpeg, .png, .gif, .bmp and .webp
    • Image Files should not exceed 1 MB (megabyte)
  • Filename
    • The Firebase Storage file name should follow the pattern photo_{docId} without a file extension name.
    • For example, when uploading a "mountain.jpg" photo on Contact document HgKAzTCzoHaIBSvqYYCAEZBO9Qp1
      • Firebase Storage file name becomes photo_HgKAzTCzoHaIBSvqYYCAEZBO9Qp1
  • Full Firebase Storage File path
    • The Storage Rules only accepts a full Firebase storage file path following the pattern:
      • photos/{userId}/photo_{docId}
      • User uploads to other paths are blocked
    • Using "mountain.jpg" and the Contact document from the previous example,
      • Full Firebase Storage file path becomes: photos/XwLYjqlWbSMRJLqcwrS9wla1bzs1/photos_HgKAzTCzoHaIBSvqYYCAEZBO9Qp1
      • The total Firebase Storage file path string length should not exceed 100 characters
      • The {userId} path segment refers to a signed-in user's authId (uid). Users must be signed-in and have a valid Firebase Auth record:
        • emailVerified=true
        • custom claims account_level=2
  • Display an option to resend the account verification email in the
    • /register page - when trying to register an unverified email
    • /account page - when signing in with an unverified email

What's Changed

Full Changelog: v1.0.6...v2.0.0

my-phonebook_v1.0.6

16 Apr 02:43
54f8cc5
Compare
Choose a tag to compare

Summary

April 16, 2023

  • Export contacts API endpoint on /api/contacts/export, #14
    • Exports contacts to a CSV file
    • Exports contacts to a PDF file
  • API documentation and example usage is available on the dev api docs for reference
  • use route instead of state ref ui.. or show.. in the client app
  • added sidebar
  • adjusted mobile responsiveness
  • Strict Firestore Security Rules for Issue #50
  • Minimal Firebase Storage Security Rules for Issue #51

What's Changed

Full Changelog: v1.0.5...v1.0.6


Firestore Security Rules Summary

  • Allow writing (create, update, delete) documents under the users root-level collection only

    • success: /users/{userId}
    • fail: /mycollection/{docId}
  • Allow writing (create, update, delete) of only uid-named documents under the /users root collection

    • success: /users/{userId}
    • fail: /users/mydocument
  • Allow writing (create, update, delete) documents in allowed subcollections only. Currently, only the users/{userId}/contacts subcollection is allowed to contain documents

    • success: /users/{userId}/contacts/{docId}
    • fail: /users/{userId}/tickets/{docId}
  • Allow reading documents only when a user is signed-in, the user has an request.auth.account_level key and the requested document falls under (or is) a /{userId} document

    • success (requires sign-in): /users/{userId}/contacts/{docId}, /users/{userId}
  • Disable creating new subcollections under documents in users/{userId}/contacts/{docId}

    • Creating subcollections under a document in a subcollection is disabled by default
    • fail (creating mysubcollection): /users/{userId}/contacts/{docId}/mysubcollection/{newId}

Create New Contact Document Rules

The following fields and their field type and character lengths are required when creating a new Contact under /users/{userId}/contacts/{docId}. Adding extra fields will cause the Contact document creation to fail.

Field Type Length
doc_id string 50
email_address string 50
first_name string 50
last_name string 50
middle_name string 50
phone_number string 50
profile_picture_url string 600
sorting string 200
date_created Firestore Timestamp -
date_updated Firestore Timestamp -

Update Contact Document Rules

The following fields and their field type and character lengths are required when updating an existing Contact under `/users/{userId}/contacts/{docId}. Adding extra fields will also cause the Contact document update to fail.

Provide the Required fields and do not supply the Not Allowed fields when updating a Contact. One or more Optional fields may be set for update.

Required

Field Type Length
date_updated Firestore Timestamp -

Not Allowed

Field Type Length
doc_id string 50
date_created Firestore Timestamp -

Optional

Field Type Length
email_address string 50
first_name string 50
last_name string 50
middle_name string 50
phone_number string 50
profile_picture_url string 600
sorting string 200

Update User Profile Document Rules

The following fields and their field type and character lengths are required when updating an existing User profile document in /users/{userId}. Adding extra fields will also cause the document update to fail.

Provide the Required fields and do not supply the Not Allowed fields when updating a User profile document. One or more Optional fields may be set for update.

Required

Field Type Length
date_updated Firestore Timestamp -

Not Allowed

Field Type Length
doc_id string 50
date_created Firestore Timestamp -

Optional

Field Type Length
email_address string 50
first_name string 50
last_name string 50
middle_name string 50
phone_number string 50

my-phonebook_v1.0.5

05 Apr 02:21
eaaca65
Compare
Choose a tag to compare

Summary

April 5, 2023

  • Create a default (blank) user document after email verification under /users/{authId} after a successful email verification. #93
  • Redirect to the /contacts page after a successful sign-in.
  • Dry-run npm run export on the GH actions lint.yml
  • Use the use-sync-v lib for managing the user auth states, an update for #76
  • Remove the redux lib and related files

What's Changed

Full Changelog: v1.0.4...v1.0.5

my-phonebook_v1.0.4

04 Apr 06:22
edf5d5a
Compare
Choose a tag to compare

Summary

April 4, 2023

User Profile

  • View User Profile feature, #25,
  • Edit User Profile feature, #27, #26

Contacts

  • View a contact document, #36
  • View contacts list feature, #32
  • Create a new contact feature, #34
  • Update contact, #40
  • Search and filter contacts feature

Other Updates

  • Create the resend email verification page, #22 , #23
  • Use descriptive text content on the account handler page (from email), with URL link back to the /login and /resend email verification pages #87
    /contacts route UI
  • wired firestore, firebaseAuth to profile page
  • Desktop and mobile layout adjustments
  • Fix the npm export bug
  • useSyncLocalStorage hooks update
    • the old one returned [value, setValue]
    • the new one, only return value
    • and the setValue is extracted to different function

What's Changed

Full Changelog: v1.0.3...v1.0.4

my-phonebook_v1.0.3

15 Mar 11:34
e85835b
Compare
Choose a tag to compare

Summary

March 15, 2023

  • Create a Firebase Auth state listener using a custom React hook, Context and Redux #76
    • Usage: const { authUser, authLoading, authError, authStatus } = useAuth()
  • Store the Firebase Auth data on the users redux store (userSlice).
    • These are available when using useAuth()
    • Optionally accessible using const { authUser, authLoading } = useSelector(state => state.users)
  • Create the ProtectedPage component wrapper (HOC) that redirects signed-out users to the /login page when trying to access a private (protected) route component, and grants access when signed-in
    • Usage: export default ProtectedPage(MyComponent)
    • Added this auth checker to the userProfile, and Dashboard page components
  • Add the "no-trailing-spaces": "error" eslint rule and lint files.

What's Changed

Full Changelog: v1.0.2...v1.0.3