Git Product home page Git Product logo

web's Introduction

Code style: black License: GPLv3

Geek.Zone Web App

This application is currently intended as the minimum viable product for Geek.Zone members and n00bs to be able to manage their Geek.Zone membership. We will build it from there, but that's our target right now! We currently use a third party to do this, and while they are not a bad service per se, they do charge us for their services and do not do all the things we need them to do. Building it ourselves will not only mean that we get the system that we need, but also that those involved will learn new, transferrable skills and have some fun doing so.

Take a look at the original spec doc.

Progress so far

Here's what the front page looks like in light mode and in dark mode.

Running the project locally

The easiest and fastest way to run the project without cluttering your machine is by using docker containers. However you should be able to setup this project on any operating system that supports Django. We have instructions for Ubuntu based linux distributions and for Windows 10. Both can be found below.

1. Install Docker

Linux/Ubuntu
# Install Docker
sudo apt-get update
sudo apt-get install -y docker.io

# Configure docker to start on boot
sudo systemctl enable docker.service

# Manage Docker as a non-root user
sudo groupadd docker
sudo usermod -aG docker $USER

Log out of your session completely and then log back in

# Install docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
# Install command completion
sudo curl \
    -L https://raw.githubusercontent.com/docker/compose/1.29.2/contrib/completion/bash/docker-compose \
    -o /etc/bash_completion.d/docker-compose
source ~/.bashrc
Windows 10
  1. Follow the instructions in the Docker documentation; the installation varies depending on the Windows 10 edition.
  2. Right-click on the Docker icon in the system tray, and Switch to Linux Containers if Docker Desktop is set to Windows Containers.

2. Run the containers

An .env.dev file under the web folder is already existing and provides environment variables to docker-compose. There are 2 docker-compose files in the project folder: docker-compose.yml, to be used in the ci/cd or to just run the project, and docker-compose.dev.yml, to be used for development purposes instead (see the Local Development section).

  1. Make sure Docker is running (Ubuntu: sudo systemctl restart docker.service or service docker.service start; Windows 10: run Powershell as administrator Start-Service 'Docker Desktop Service')

  2. docker-compose up (to run containers when the images are already present in the machine; if not existing they will be created)

  3. docker-compose --build (to build images for each service outlined in the docker-compose.dev.yml file)

  4. docker-compose up --build (to force to re-build images and run containers out of these images)

  5. docker-compose ps (from another terminal window, to check the status of each container created by docker-compose)

  6. If you navigate to http://localhost:8000/memberships/register in your browser you should see the app main page. You can press control-c in the terminal to exit docker-compose.

  7. docker-compose down (to delete the network and containers that docker-compose created)

Ubuntu based Linux (or WSL on Microsoft Windows)

This guide assumes that you can execute basic terminal commands. It also assumes that you have setup github with SSH keys.

Ubuntu 20.04 and above should come with a recent enough version of Python 3 for you to follow along with this guide. As of writing I am using Python 3.8.5.

First follow the instructions below for initial setup.

  1. Install the Python package manager pip by running the command sudo apt install python3-pip
  2. Install virtualenv using the command python3 -m pip install virtualenv. This tool allows us to install dependencies local to a project and not clutter your system.
  3. Clone this repository to your desired location git clone [email protected]:geekzonehq/web.git and change into that directory cd web.
  4. Create a virtual environment python3 -m virtualenv env. This will create a folder in the project called env that will contain all of the project dependencies.
  5. Activate the virtual environment source env/bin/activate
  6. Install libpq-dev package required by psycopg2 sudo apt-get install libpq-dev
  7. Install the project dependencies pip install -r requirements.txt
  8. Install Postgres database sudo apt-get -y install postgresql
  9. Configure Postgres to start on boot sudo systemctl enable postgresql or service postgresql start
  10. Switch user environment to postgres user sudo su postgres
  11. Run the Postgres interactive terminal psql
  12. Change/assign password to postgres user \password postgres
  13. Type a new password, (e.g. 'postgres'). This password has to match whatever is configured in step 16
  14. Exit from postgres database terminal exit
  15. Exit from postgres user environment exit
  16. Create an .env file with parameters for local development. Add any extra parameters as needed:
cat <<EOF > web/.env
DEBUG=1
DATABASE_USER=postgres
DATABASE_NAME=postgres
DATABASE_HOST=localhost
DATABASE_PASSWORD=postgres
DATABASE_PORT=5432
EOF
  1. Run the database migrations python3 manage.py migrate
  2. Install RabbitMQ sudo apt-get install rabbitmq-server
  3. Configure RabbitMQ to start on boot sudo systemctl enable rabbitmq-server or service rabbitmq-server start
  4. Run the celery worker celery -A web worker --loglevel=info
  5. Open another terminal and run the local server python3 manage.py runserver. If you navigate to http://localhost:8000/memberships/register in your browser you should now see the app. You can press control-c in the terminal to exit the server.

After you have done the above subsequent setup is a lot simpler.

source env/bin/activate # You only need to do this if your virtual env is not already active
python manage.py runserver

If there are new changes to the database the runserver output will run you through the process of updating and running the migrations.

Microsoft Windows (Without WSL)

This guide assumes that you can execute basic terminal/Powershell commands. It also assumes that you have setup github with SSH keys. Currently the project needs some adjustments to run in Windows. Specifically the USER and PASSWORD variables for Postgres need either to be hard-coded in settings.py or passed through cli when running database migrations.

  1. Install Git for windows by downloading a copy from https://git-scm.com/download/win
  2. Install Python from the Microsoft store. Typing python into a command prompt will open the correct page on the Microsoft store. This will also install the pip package manager.
  3. Install virtualenv using the command pip install virtualenv. This tool allows us to install dependencies local to a project and not clutter your system.
  4. Clone this repository to your desired location git clone [email protected]:geekzonehq/web.git and change into that directory cd web.
  5. Create a virtual environment python -m virtualenv env. This will create a folder in the project called env that will contain all of the project dependencies.
  6. Activate the virtual environment env\Scripts\activate.bat
  7. Install Postgresql from this link: https://www.enterprisedb.com/downloads/postgres-postgresql-downloads
  8. Run the installation wizard, choose a password for the database superuser (postgres) and accept all subsequent defaults, click on "Finish"
  9. Press Win+R and type services.msc: scroll down to the postgres-service=name and start it if it is not already running. If the option to start the service is greyed out, configure Postgres to start on boot: right-click on the postgres-service-name, click on Properties and set the Startup type to Automatic. The same can be achieved by running as administrator a couple of Powershell commands:
Install-Module PostgreSQLCmdlets
Set-Service -Name "<<postgres-service-name>>" -Status running -StartupType automatic
  1. Create an .env file with parameters for local development. Add any extra parameters as needed:
echo "DEBUG=1
DATABASE_USER=postgres
DATABASE_NAME=postgres
DATABASE_HOST=localhost
DATABASE_PASSWORD=postgres
DATABASE_PORT=5432" | tee web/.env
  1. Install the project dependencies pip install -r requirements.txt
  2. Run the database migrations python manage.py migrate
  3. Install Erlang for Windows using an administrative account from this link: https://erlang.org/download/otp_versions_tree.html
  4. Download and run the latest Rabbitmq installer from this page: https://github.com/rabbitmq/rabbitmq-server/releases. Rabbitmq service should already be running, otherwise start it from the start menu
  5. Run the celery worker celery -A web worker --loglevel=info
  6. Open another terminal and run the local server python manage.py runserver. If you navigate to http://localhost:8000/memberships/register in your browser you should now see the app. You can press control-c in the terminal to exit the server.

After you have done the above subsequent setup is a lot simpler.

env\Scripts\activate.bat # You only need to do this if your virtual env is not already active
python manage.py runserver

If there are new changes to the database the runserver output will run you through the process of updating and running the migrations.

Running RabbitMQ & Celery independently (same configuration for Ubuntu and Windows 10)

RabbitMQ & Celery have been purposefully implemented in a way that allows them to be used in any part of the project. Equally, this also allows them to be used interactively in the Django Python shell.

  1. Make sure RabbitMQ is running (Ubuntu: sudo systemctl start rabbitmq-server; Windows 10: run Powershell as administrator Start-Service RabbitMQ)
  2. Run the celery worker celery -A web worker --loglevel=info
  3. python manage.py shell
  4. from memberships import tasks, email
  5. import celery
  6. Run a task function from tasks.py, such as tasks.task_send_email("Bob", "[email protected]", "Hello world", "Just a test")

You will need the password if you want to send from an @geek.zone email address. Please contact @JamesGeddes for this or configure your own testing email address in settings.py.

Local Development

Working on the front-end code

All commands in this section can be run either in Docker containers or in the virtual environment.

The website currently uses Tailwind CSS to style the front end. Tailwind works by generating a stylesheet at theme/static/css/dist/styles.css, using settings located in theme/static_src (with base styles at theme/static_src/src/styles.scss).

A development build of styles.css already exists in the repository, containing all possible Tailwind base styles. Therefore, only install and run Tailwind if you plan on making changes to settings or base styles at theme/static_src (or you want to generate a production build of styles.css). You do not need to install and run Tailwind to make simple styling changes.

1. Docker

To test any changes in the code:

  1. Run the project in docker-compose from docker-compose.dev.yml:
docker-compose -f docker-compose.dev.yml up --build
  1. From another terminal window, open a shell into the web container:
docker exec -it web sh
  1. Run the following commands to install and start tailwind or generate a production build of styles.css:
python3 manage.py tailwind install
python3 manage.py tailwind start
python3 manage.py tailwind build
  1. To leave the container's shell, type:
exit

2. Virtual environment

Installing Tailwind

You will need to ensure Node.js and NPM are installed on your system first - Node.js must be version 12.13.0 or higher.

Once that's done, run:

python manage.py tailwind install

You will need to run this command again if you ever upgrade Node.js.

Running Tailwind alongside the local server

When running the local server, run the following in a second terminal/command prompt:

python manage.py tailwind start

This will re-generate the development build of styles.css, then watch for any changes made to files in theme/static_src.

A production build of styles.css can be generated using the command python manage.py tailwind build - this reduces the file to only the base styles that are actually being used.

If you want to use LiveReload to automatically refresh your web browser in response to file changes, run the following in another terminal/command prompt:

python manage.py livereload

Suggested tools

Clearly, you can and should use which ever development tools you prefer. If you don't have a preference, we suggest trying,

General coding

Python

SQL

Diagrams

Also, do join us on our Discord!

Running the Tests

Simply run python manage.py test.

Changing the CircleCI Build

We have found the circleci local cli tool to be very useful when making changes to the circle build locally. The errors can be a bit cryptic, but it's easier than debugging basic syntax issues from within the circleci console.

Contributing

We try to be super informal, and we welcome all PRs. For full details, see CONTRIBUTING.

License

Geek.Zone is a member of the Open Source Initiative, so all our projects are published under GPLv3. Any contributions you make will be published under these provisions. See LICENSE.

web's People

Contributors

bishira14 avatar blackbird7958 avatar carwynnelson avatar cclauss avatar dependabot-preview[bot] avatar dependabot[bot] avatar freshrojek avatar giulio-giunta avatar guilletomac avatar jamesgeddes avatar kbcbals avatar madifz avatar pyup-bot avatar samwinterhalder avatar snyk-bot avatar tbentham avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

web's Issues

Accounts for those Under 18 Years of Age

While anyone can be a Geek.Zone member regardless of their age, those under 18 years need oversight from their parent/guardian.

For MVP, only allow registration from those who are over 18 years old. Ask those under 18 to contact [email protected]

Thanks for your interest in joining Geek.Zone! We are eager to have you on board, however, as you are under 18 we need to speak to your parent or guardian. Please ask them to email [email protected] to request membership on your behalf. Thanks!

Automatically configure DNS from Kubernetes services

Background

The test.geek.zone DNS entry is manually configured in Cloudflare against an AWS loadbalancer that is configured in kubernetes config.

It would be nice if the management of this DNS entry could be done in the Kubernetes cluster. This might also make it easier for us to deploy pull request branches to nice domain names in the future.

Resources

I came across this helm plugin for cloudflare DNS in kubernetes that might be helpful https://github.com/estafette/estafette-cloudflare-dns.

Impact

High

Urgency

Now

Setup postgres database in AWS

Background

We have chosen to use PostgreSQL as our database for this project. We will need to set up a pgsql database in AWS before we go live - and ideally early on in the development process.

Notes on approach

Two ways of deployment immediately come to mind:

  • Use Amazon RDS
  • Deploy to the kubernetes cluster

I would lean towards RDS for two reasons:

  • It is a managed service that amazon secures, patches, and updates
  • I believe it has high availability built in (fail over replication etc)
  • I imagine that setting up a database in RDS would be rather tricky

Kubernetes does have some positives that come to mind though:

  • We can install whatever extensions we want
  • We can use whatever configuration we want
  • If we moved to a different cloud provider the k8s configuration would likely require minimal changes

From a security, reliability, and performance perspective I believe it would be better to have a separate development and live database instance.

Impact

?

Urgency

?

Retention policy

Requires #39

Check if a Sand membership fee is due on each member.

If Sand membership fee not yet paid (new member)

  • force payment process on login
  • send a reminder email after 24 hours
  • send a reminder email after 72 hours
  • delete account after 120 hours and send email to notify.

If Sand membership fee is due soon, send member reminders to pay.

If Sand membership fee is not paid after six months,

  • update their membership termination date
  • The author on posts published by that member must be changed to "Anonymous [animal]"
  • their member profile must be set to private.

If the former member does not re-join Geek.Zone in the 12 months following the membership termination date, delete their personal data. Posts and articles that the member published remain but personal data must be deleted.

Notes for the future
Each membership type (see #47) will need its own retention policy, including what happens to the member if they do not pay within the allotted time period. Not required at MVP but worth bearing in mind for the future.

It is also important to consider that this should be user editable by those in the the Trustees group, #47, in the future.

Payments for Membership

Requires further discussion and involvement from the Treasury and Trustees.

Background

There are two tiers of membership planned

  • Sand - basic annual membership at a cost of £1 + donation per year
  • Space - monthly membership that gives you access to https://geek.zone/01. Expected to cost £1 + donation per month

We need to implement Sand membership before the release of membership management as that is what all existing Geek.Zone members are currently paying.

We are planning to support multiple methods for payment so as to be as inclusive as possible. The first payment method we plan to support is UK Direct Debit via BACS.

GDPR Permissions

Not required on registration, should be included in user account as a "complete your membership" task.

Ask member for the following permissions.

  • Photos, Audio & Video
  • SMS Updates
  • SMS System Messages
  • Email Updates
  • Constitutional Emails (required)
  • Telephone
  • Postal Updates
  • Constitutional Post (required)

Impact

High

Urgency

Now

Allow pull request deployments

Background

Currently all merges to master are automatically deployed to test.geek.zone using our circleci build. This is very useful - it allows anyone with commit access to get changes released without direct access to the Kubernetes cluster.

It would be great if we could deploy pull requests to the k8s cluster to allow for easier testing and review of pull requests. Right now this is possible if you have commit access as you can directly modify the circleci config and it will be run. The downside to this is that it deploys to test.geek.zone, removing what was there before.

I propose that we deploy all pull requests to a url like pr-number-branch-name.pr.geek.zone and then deploy to test.geek.zone on merge to master.

When we deploy this change to live merges to master would deploy to the home of this project instead of test.geek.zone.

Thoughts?

Impact

?

Urgency

?

Setup SSL for test.geek.zone

Background

The current deployment of test.geek.zone introduced in #10 is only setup for HTTP. We should configure test.geek.zone to use HTTPS instead.

This might require using something other than a LoadBalancer service in Kubernetes. Setting this up fairly early on in the development cycle will make this process easier when we go to production with membership management.

Implement reCAPTCHA v3

Implement Google reCAPTCHA v3 to identify when a guest appears to be a bot, then challenge them if they might be a bot.

Split from #30

Public profile

Allow member to opt-in to publish a public profile. User should select a URL with the format geek.zone/[username]

Members should be able to set their profile visibility to

  • private only (default)
  • other GZ members only
  • public

If member leaves GZ, set profile to private. Retention policy will take care of member deletion.

Impact

High

Urgency

Later

Postal address validation

We need to ensure that we have got the correct postal address for every member. Digital postal address validation is never 100% accurate, so the only way to be certain is to actually post a thing to the member.

  1. Send member a physical welcome letter when they join Geek.Zone
  2. In that letter, include a random validation code. Ask member to enter this in their account.
  3. In the member account, create an area that checks to see if that code is correct. If code is correct, mark address as valid. If not, do not mark address as valid.
  4. If user changes postal address, repeat validation

Originally logged in Trello card HCCw8goZ

Impact

High

Urgency

Now

Migrate existing members over

  • create account from member mojo information
  • user sets a password on first login (maybe set a temp password for them)
  • when the user logs in for the first time they will be prompted to setup a direct debit and confirm their yearly donation amount
  • create a subscription for the member in stripe with a trial_end of the end of their membership in member mojo
  • send a courtesy email a month before they are to be billed to allow them to cancel in time
  • provide the member a way to delete their information and cancel their current membership?

Impact

High

Urgency

Later

Logging and monitoring

Background

We will need some kind of logging and monitoring solution for our application hosted on kubernetes. We should be able to:

  • Hoover logs into a central location such as Graylog or ELK in a GDPR compliant way
  • Allow trusted members to search through those logs
  • Gather metrics on the various aspects of our system eg: number of 5xx responses, sql query performance, etc
  • Send alarms to certain members when serious errors that require investigation occur

Impact

High

Urgency

Now

Write GitHub Sponsors Intro

I have created a wiki page, GitHub Sponsors Intro, so that we can all contribute to this together!

I have signed GZ up for GitHub Sponsors. Before they can accept our application, they need;

Short bio (250 characters)
This is used where your sponsorship is shared (e.g., social cards and github.com/sponsors if you opt-in to be featured).

Introduction
This is the main content that appears on the GeekZoneHQ GitHub Sponsors profile, so it is a great opportunity to help potential sponsors learn more about you, your work, and why their sponsorship is important to you.

Here are some ideas of what we can tell potential sponsors:

  • Who are you, and where are you from?
  • What are you working on?
  • Why is their sponsorship important? How will you use the funds?

Impact

?

Urgency

?

Deployment

Requirements

We require an easy way for contributors to test and deploy their work to testing and production environments.

  • Pick a deployment method (elasticbeanstalk, kubernetes, EC2)
  • Hand rolled kubernetes cluster in AWS (production-level setup can come at a later stage)
  • Build and deploy changes to k8s on merge to master

In the future I would like trusted members to be able to deploy pull requests to a test environment. eg my-branch.test.geek.zone. This can be dealt with at a later date.

Show external links

All links that lead to domains outside of geek.zone should have a trailing icon showing that it is an external site. For example, Wikipedia does this.

Brownie Points
Show a different icon for external links that lead to a site that Geek.Zone will be paid for the referral, such as an affiliate link. Could be activated by a tag in the link, perhaps.

Impact

High

Urgency

Now

Member groups

Users should be able to join groups within Geek.Zone. For example, some people within Geek.Zone might be particularly interested in Anime, while others might be interested in Software Development. These member groups will help to organise the community and perform automated actions to improve the membership experience.

Each group should be able to define its own membership requirements and benefits, including but not limited to,

  • email mailing list address - requires #48
  • web page address - Geek.Zone/group
  • web page content - requires #82
  • membership onboarding requirements, for example
    • admin approval
    • community poll approval (eg Discord mods group)
    • take specified course(s), requires #506
    • pay a fee (should require Trustee approval)
  • Contributor type - will group members perform work for Geek.Zone?
    • Volunteer
      Members of this group will perform unpaid work for Geek.Zone.
    • Staff
      Members of this group are paid Geek.Zone employees.
    • Participant
      Members of this group will participate in activities but will not perform work for Geek.Zone.
  • membership period
  • automated membership actions, reversed on group departure - for example,
    • added to our GitHub org - see #477
    • added to a Discord role
    • added to facebook page editors
  • grace period
  • chat channels

Members should be able to create new groups.

If a member is in >0 staff groups, their personal contribution status is staff. They can not count toward Geek.Zone volunteer numbers. They should count toward Geek.Zone staff numbers.

Impact

High

Urgency

Now

automate minecraft allowlist

Add member minecraft username, see #55, to the Geek.Zone/Minecraft allow list. If member leaves Geek.Zone, remove member from Geek.Zone/Minecraft allow list.

Impact

High

Urgency

Now

GDPR article 17

Automate the process of deleting all user data under GDPR article 17, including on other platforms.

Provide user with the following warning.

This is the nuclear option. If you proceed, you will never have existed from our perspective. All your contact details will be erased, everything you have ever published at Geek.Zone will be attributed to "Anonymous" and you will be removed from all our social media channels. There is no way back from this.

If you have complaints or concerns, please discuss them with our Trustees on [email protected] first, as we will be able to address them for you. If you just want to leave Geek.Zone temporarily because, for example, you are going on holiday, do not do this.

If you do choose to proceed, Geek.Zone will always welcome you back in the future. You will, however, need to register an entirely new account, so you will never be able to reclaim attribution for anything you did previously.

Are you sure you want to continue?

Impact

High

Urgency

Now

2FA

Allow users to use the following methods of 2FA

Priority:

  1. Auth app (eg google authenticator)
  2. Physical key (eg Yubikey)
  3. SMS (highly discouraged)

The 2FA settings page should link to the GZ blog post about 2FA (variable to be set by Trustees group). This will explain why one should avoid SMS auth.

Impact

High

Urgency

Now

ERD: Social Media Usernames & Contact confirmation

ERD needs to show fields that can store the

  • social media usernames of members; Facebook, Twitter, Instagram, tiktok, linkedin
  • contact information confirmation flags for phone, email and postal address

Database migrations on deployment

Background

We have a basic deployment that will get this code base on to a Kubernetes cluster, but we need to be able to run database migrations before deployment.

As of writing this issue this isn't so much of a concern as we are using a sqlite database that could be committed to the repository with migrations run before merge - as soon as we move to a postgres database this will be essential.

Accounts for those under 18 years of age - better solution

If prospective member is under 18,

  • request email address of parent of guardian
  • send email to guardian to set a Geek.Zone account up for the child

Guardian must be

  • over 18
  • the children’s legal guardian

In guardian email, include button

"Set up a Geek.Zone account for the child"

  1. Request child
  • date of birth
  • email address
  1. Request payment details

Impact

High

Urgency

Later

Add first-timers-only badge

Add the first-timers-only badge to the web repo readme

[![first-timers-only](https://img.shields.io/badge/first--timers--only-friendly-blue.svg?style=flat-square)](https://www.firsttimersonly.com/)

Emergency contacts

Allow member to add emergency contacts to their account. Required information:

  • Emergency contact full name
  • Emergency contact telephone number (mobile preferred)
  • Emergency contact relationship
  • Emergency contact priority - which order to call contacts in

Provide access to emergency contacts to those in Trustee group, see #47

Member should be encouraged to add at least one emergency contact. Member should be able to add infinite emergency contacts.

Impact

High

Urgency

Now

Database schema

Requirements

We should think about the database schema before we write it in Django. This should result in a better design, act as documentation, and make it easier for others to contribute to building the membership management system.

It would be ideal if this schema lived in the git repository in a format that could be easily edited by others. This would give us the opportunity to update it over time, even if we choose not to take that opportunity.

Basic user registration

Requirements

A basic user registration form that allows new people to sign up for Geek.Zone membership. This initial basic form should focus on the minimum required to register someone to Geek.Zone.

  • full name
  • preferred name
  • email address
  • date of birth (saved to the db in iso8601 format)
  • a password (so they can log in to their account)
  • Their agreement to the geek.zone constitution

This first pass does not include taking payments

Multiple membership types

Members should be able to upgrade their membership level to allow them to get more from GZ. For example, "Space" membership allows members to access Geek.Zone/01.

Allow Trustee group, see #47, to add and configure membership types. Trustees should be able to configure the membership type,

  • name
  • cost
  • duration
  • payment grace period (how long a member has after payment is due)
  • what happens to a member after the grace period
    -- delete member
    -- downgrade to other membership type

Pre-Live Checklist

Background

Before we go live we should ensure we are doing everything we can to keep this application secure and performant. Django has provided a nice checklist that we should follow which can be found at https://docs.djangoproject.com/en/3.0/howto/deployment/checklist/.

We should also ensure we follow the Stripe integration checklist before taking payments from real Geek.Zone members. The Stripe checklist can be found at https://stripe.com/docs/payments/checkout/live.

And finally we should ensure all requests and assets are served over HTTPS, and that certificate renewal is automated, or documented and delegated to a trusted individual.

Enable GitHub 2FA

Not specific to this repo but seems like as good a place as any to log this!

On 2020-11-30T19:00 I will turn on "Require two-factor authentication for everyone in the Geek.Zone organization." All those without 2FA enabled on their GitHub account will be removed from the Geek.Zone GitHub org and will need to be re-invited once they have 2FA activated. I don't want to boot people at all, let alone without giving you a chance to sort it first!

I would be most grateful if you could please,

  • activate 2FA
  • confirm completion in the comments, feel free to leave the ticket too

Activating 2FA not only helps to secure the Geek.Zone GitHub org but also your own GitHub account. It takes moments to set up but could prevent something dreadful, so its a great measure to take on all your accounts. Do it now!

Door entry system

Every Geek.Zone will need a door entry system that can check the "Members of Space" group, see #47, and allow Space Members to enter.

Initial version should use RFID card or one time QR code.

Future version could use host card emulation.

Scanning device will

  1. Scan presented QR code
  2. Translate QR code into string
  3. Request OTP validity from server
  4. If OTP is valid, scanning device will perform an action, if not, it will perform a different action.

If request is sent with invalid API key, 401 will be returned

For example, if OTP is valid, open the door.

Originally logged in Trello card vsAllEVQ

Impact

High

Urgency

Now

telephone number validation

Blocks #628

GZ needs to confirm that we have the correct telephone number for the user.

Does not need to occur on registration. In the user account, show phone number as unverified and give the option to verify. During verification process

  1. Ask user to select call or sms
  2. Send unique code using call or sms
  3. User to input code into account to verify number
  4. If user changes telephone number, repeat validation

Could use Twilio or similar. If on a mobile device, app could read SMS to verify automatically.

Originally logged in Trello card eUcXLHOo

Impact

High

Urgency

Now

Member Settings

Create a member settings area so that members can manage their membership.

Other usernames

Allow member to add usernames for other accounts to their GZ account for display on the profile, see #54, and link to those providers.

Should include a list of suggested providers as well as allowing user to set custom sites. Suggested providers list should include,

  • Facebook
  • Twitter
  • Instagram
  • YouTube
  • Minecraft
  • Steam

Members should be able to add their own custom links.

Brownie points:

Providers that are added by many users should be added to the suggested list automatically. Trustees should have the ability to remove providers from the suggested list.

Bonus brownie points

Use the remote sites favicon as the link icon on the member profile. cache the favicon for a suitable period then dump and update it.

Impact

High

Urgency

Later

Better Gift aid

Allow member to opt-in for Gift Aid. Feature must,

  • Check if postal address is validated - requries #49 - if not, remind user to validate
  • Record datetimes that user opted in
  • Record datetimes that user opted out

Impact

High

Urgency

Now

Production Kubernetes Cluster

Background

I quickly created a kubernetes cluster in AWS using EKS so that we could have a reasonable testing environment whilst we build up the feature set for this project.

At some point we will need to spend some time creating a cluster that is ready for production. This new cluster should:

  • Have all of its configuration in a git repository
  • Follow available security guidance
  • Make use of Kubernetes concepts such a namespaces to separate out different GeekZone projects

It is likely that the configuration for this new cluster will have to be split out into its own repository, but as the cluster originated from this work it makes sense to initially track this issue here.

We also need to be conscious of cost. The last time I tried to run up a Kubernetes cluster using EKS it ended up costing us ~$90 in a single month. This isn't a massive amount of money on its own but if left alone it could have easily taken out a big chunk of our AWS budget. Just something to be wary of

Impact

?

Urgency

?

Login & Settings

create log in form and member settings area for existing members to manage their membership

Developer environment documentation

Requirements

We have no documentation or instruction on how to contribute to this project. It's early days, so it's probably best to get something basic added early so that it's easier to build on later.

Some basic instructions on how to setup and run the project should be sufficient. I imagine we should test the instructions on Windows, Mac, and Linux if possible.

Original Trello Contents

JamesGeddes:

I would suggest the following.
* Ubuntu
* Python3
* Pycharm
* Pip3
* Git
* Github connection
* Django
* Dbeaver
* DB connection

Have I missed anything @carwynnelson? Will write something to automate this.
Puppet perhaps? Could build an ISO VM image so that people can download and
install it with ease? Puppet could then ensure it stays current.
What do you think is the best solution?

CarwynNelson:

I think it should be sufficient to mention:
* Python 3.x with pip3
* git
* github account

I would recommend virtualenv, and we can add documentation for that - but it's not
required. The dependencies for the project are currently in a requirements.txt
which pip can install from.

I would leave text editors and database clients up to individual preference,
but leaving some recommendations wouldn't be a bad idea.

If the project ends up being tied to postgres due to us using a specific feature
then we can put together a docker container that people can connect to on
their local machines.

EDIT: People should be able to run this on windows just fine. Using WSL
would probably be easier - but it shouldn't be a requirement.

Member mailing lists

Group leaders need to be able to send an email to [group-name]@geek.zone mailing lists as defined by #47

Membermojo provides built-in mailmerge functionality. If you include [first_name] in the email, it will automatically substitute the first name of that member.

Build a feature that

  • accepts an email to [list name]@geek.zone
  • replaces tags with member data, including but not limited to preferred name, full name...
  • sends individual email to the member

Requires #147

Impact

High

Urgency

Later

User creatable databases

Tikiwiki has "Trackers" which allows users to create and define a database structure within the site, with no database knowledge required. GZ has already used this to create the asset register.

Build a similar - but better - system that allows a user to

  • define the data that they want to record
  • define the relationships between that data
  • record that data

Impact

High

Urgency

Later

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.