Skip to content

Commit

Permalink
Merge pull request #15 from UMLCloudComputing/feat--landing-page-sche…
Browse files Browse the repository at this point in the history
…dule

Feat  landing page schedule, getting started, sign in modal, submodules init
  • Loading branch information
ultralapse authored Jul 15, 2024
2 parents 4d1067d + b8fc225 commit 0cb26c7
Show file tree
Hide file tree
Showing 132 changed files with 37,218 additions and 4 deletions.
6 changes: 6 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
[submodule "rowdybot"]
path = submodules/rowdybot
url = [email protected]:UMLCloudComputing/rowdybot.git
[submodule "UniPath.io"]
path = submodules/UniPath.io
url = [email protected]:UMLCloudComputing/UniPath.io.git
121 changes: 121 additions & 0 deletions account_automation_script.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
# Author: Gurpreet Singh
# Date: 7/1/2024
# Copyright 2024
# Property of UML Cloud Computing Club

## WIP

import boto3
import argparse
import secrets
import string
import sys
import logging

logger = logging.getLogger(__name__)

DEFAULT_PASSWORD = "Cloud@computing1"

def create_random_password(length = 16) -> str:
chars = string.ascii_letters + string.digits + string.punctuation
password = ""
for i in range(length):
password += secrets.choice(chars)
logger.info(f"Password created, length: {length}")
return password

def create_user(args, username: str, password=None, policy_group=None):
iam = boto3.client("iam")
# Check if user exists
try:
iam.get_user(UserName = username)
if (args.verbose):
print(f"IAM User Creation failed: Username taken")
if (args.logging):
logger.warning("IAM User Creation failed: Username taken")
except iam.exceptions.NoSuchEntityException:
try:
if password is None:
password = create_random_password()
iam.create_user(UserName=username)
iam.create_login_profile(UserName=username, Password=password, PasswordResetRequired=True)
if (args.verbose):
print(f"New IAM user '{username}' created sucessfully with password: '{password}'. Be sure to change ASAP.")
if (args.logging):
logger.info(f"New IAM user '{username}' created sucessfully with password: '{password}'.")

if policy_group is not None:
try:
iam.add_user_to_group(GroupName='UML_Students', UserName=username)
if (args.verbose):
print(f"Policy group {policy_group} added to '{username}'")
if (args.logging):
logger.error(f"Policy group {policy_group} added to '{username}'")
except Exception as e:
if (args.verbose):
print(f"Error adding '{username}' to the policy group '{policy_group}'. {e}")
if (args.logging):
logger.error(f"Error adding '{username}' to policy group '{policy_group}'. {e}")
except Exception as e:
# ADD VERBOSE
if (args.verbose):
print(f"Error creating the new IAM user '{username}'. {e}")
if (args.logging):
logger.error(f"Error creating IAM user '{username}'. {e}")


if __name__== "__main__":
parser = argparse.ArgumentParser(
prog = 'account_automation_script.py',
description="AWS IAM User Creation Automation using Python",
epilog="Contact the UML Cloud Computing Discord for help or to report any issues: https://discord.gg/7ETpHA33",
)

# Argument groups
file_group = parser.add_argument_group("Batch User Creation", "Argument for batch creation of new IAM users via a file")
single_user_group = parser.add_argument_group("Single User Creation", "Arguments for creating a single new IAM user")
log_verbose_group = parser.add_argument_group("Logging/Verbose", "Arguments related to logging and info")

# Runtime arguments
single_user_group.add_argument('-u', '--username', action="store", type=str, help="The username for the new IAM user")
parser.add_argument('--use_default_pswd', action='store_true', help="Whether or not to use the default password: 'Cloud@computing1'", default=False)
single_user_group.add_argument('--policy_group', action="store", type=str, help="The Policy group to be used for the IAM user being created", default=None)
file_group.add_argument('--filename', type=str, help="Filename for file that contains IAM user details, seperated by newlines. Format: (username policy_group\\n)")
log_verbose_group.add_argument('-v', '--verbose', action="store_true", help="Enable verbose mode")
log_verbose_group.add_argument('--logging', action="store_true", help="Enable logging to a file")
args = parser.parse_args()

# Manual mutually exclusive arugment checking because argparse cannot do this natively
if args.filename and (args.username or args.policy_group):
print("--filename and --username|--policy_group are mutually exclusive arguments")
if (args.logging):
logger.error("Invalid runtime argument combination (f&(u|p))")
sys.exit(2)

if args.username and not args.policy_group:
print("Policy group not specified for user. Please specify via --policy_group.")
if (args.logging):
logger.error("Invalid runtime argument combination (u!p)")
sys.exit(2)

if args.policy_group and not args.username:
print("Username not specified. Please specify via --username")
if (args.logging):
logger.error("Invalid runtime argument combination (p!u)")
sys.exit(2)


password = DEFAULT_PASSWORD if args.use_default_pswd else None

if not any(vars(args).values()):
parser.print_help()
sys.exit()

if args.filename:
with open(args.filename, 'r') as file:
lines = file.read().splitlines()
for line in lines:
username, policy_group = line.split()
create_user(args, username, password, policy_group)
else:
create_user(args, args.username, password, args.policy_group)
56 changes: 56 additions & 0 deletions docs/Getting Started and FAQ.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@

[![Website](https://img.shields.io/badge/Website-UML%20Engage-blue.svg?style=for-the-badge)](https://umasslowellclubs.campuslabs.com/engage/organization/cloudcomputingclub)
[![Discord](https://img.shields.io/discord/890983857938116729?logo=discord&logoColor=white&style=for-the-badge)](https://discord.gg/WC2NdqYtDt)
[![Email](https://img.shields.io/badge/Email-cloudcomputingclub%40uml.edu-red.svg?logo=gmail&logoColor=white&style=for-the-badge)](mailto:[email protected])

# UMass Lowell Cloud Computing Club

## 🚀 Getting Involved

If you're interested in getting involved with our club, the best way to start is by attending our regular club meetings. All organizational tasks, discussions, and work will be coordinated through our [Discord server](https://discord.gg/WC2NdqYtDt).

Feel free to reach out to our club leaders for more information. We look forward to seeing you!

## 💬 Frequently Asked Questions (FAQ)

#### Q: Who can join the UMass Lowell Cloud Computing Club?
**A**: The club is open to all UMass Lowell students, faculty, and staff, regardless of their experience level with cloud computing.

#### Q: How do I join the club?
**A**: The best way to join is to attend our regular meetings. You can also join our [Discord server](https://discord.gg/WC2NdqYtDt) for updates and discussions.

### Meetings

#### Q: When and where are the meetings held?
**A**: The meeting schedule is outlined in the README. The location will be announced prior to each meeting.

#### Q: Can I attend meetings virtually?
**A**: Yes, you can! All our meetings are also accessible virtually via our [Discord server](https://discord.gg/WC2NdqYtDt).

#### Q: What if I miss a meeting?
**A**: Don't worry! Meeting materials and summaries will be uploaded to the respective week's folder in our GitHub repository.

### Projects

#### Q: Do I need prior experience to contribute to the project?
**A**: No, you don't need prior experience. We aim to make the project inclusive for members at all skill levels.

#### Q: How can I contribute to the project?
**A**: Contributions can be made through our project repository on GitHub. More details can be found in the "Project Repository" section of this README.

### Technologies

#### Q: Do I need to know all the technologies listed to participate?
**A**: No, you don't need to be proficient in all the technologies. The club serves as a learning platform, and we'll cover various technologies throughout the semester.

#### Q: What if I'm interested in a technology not listed?
**A**: We're open to exploring new technologies! Feel free to bring it up during meetings or on our Discord server.

### Contact

#### Q: How can I contact the club leaders?
**A**: You can reach out to us via our [Discord server](https://discord.gg/WC2NdqYtDt) or by sending an email to [[email protected]](mailto:[email protected]).

---

If you have a question that's not listed here, feel free to ask on our [Discord server](https://discord.gg/WC2NdqYtDt) or reach out to the club leaders.
41 changes: 41 additions & 0 deletions docs/Meeting Schedule.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
[![Website](https://img.shields.io/badge/Website-UML%20Engage-blue.svg?style=for-the-badge)](https://umasslowellclubs.campuslabs.com/engage/organization/cloudcomputingclub)
[![Discord](https://img.shields.io/discord/890983857938116729?logo=discord&logoColor=white&style=for-the-badge)](https://discord.gg/WC2NdqYtDt)
[![Email](https://img.shields.io/badge/Email-cloudcomputingclub%40uml.edu-red.svg?logo=gmail&logoColor=white&style=for-the-badge)](mailto:[email protected])

# UMass Lowell Cloud Computing Club: Fall 2024

## 📆 Meeting Schedule

**Events & Meeting Location**: https://sesh.fyi/dashboard/890983857938116729/events?view=calendar

**Meeting Time**: Every meeting will be Thursday from 6:30pm-9:30pm.

- **Presentation Section (6:30pm-8:00pm)**: This portion is reserved for presentations, demos, and sometimes special guest speakers. It is more structured and follows the weekly topics closely.

- **Hands-On Section (8:00pm-9:30pm)**: This time is allocated for working on the semester project. It is more interactive, free-flowing, and unplanned, allowing for hands-on experience and collaboration.

Legend
- 🟢 Meetings with confirmed speakers and topics
- 🟡 Meeting details TBD/not yet confirmed
- 🔴 Meetings not planned
- 🔵 Completed meetings

| Date | Week and Topic | Speaker | Description |
|-------------|-------------------------------|--------------|--------------|
| 🔵 Jan 18th | Week 1: Welcome to the Cloud Computing Club | Club Leaders | **Presentation Section:**<br />- Brief presentation on the UML Cloud Computing Club and introduction to who we are and what we do.<br />**Hands-On Section:**<br />- Work on UniPath.io |
| 🔵 Jan 25th | Week 2: Guest Speaker | [Dr. Johannes Weis](https://www.uml.edu/sciences/computer-science/people/weis-johannes.aspx) | **Presentation Section:**<br />- TBD<br />**Hands-On Section:**<br />- Work on UniPath.io |
| 🔵 Feb 1st | Week 3: Guest Speaker - Co-Op Program Overview and Internships Open Q&A | [Anthony Terravecchia](https://linkedin.com/in/anthony-terravecchia) | **Presentation Section:**<br />- We will have a speaker from the Career & Co-op Center at UMass Lowell give us an informative session with an overview of the Co-Op Program and answer any questions regarding internships.<br />**Hands-On Section:**<br />- Work on UniPath.io |
| 🔵 Feb 8th | Week 4: Intro to Docker & Containerization | Matthew Harper | **Presentation Section:**<br />- Introduction to Docker and the concept of containerization in cloud computing.<br />**Hands-On Section:**<br />- Continue work on UniPath.io |
| 🔵 Feb 15th | Week 5: Agile with Prof. Idith Tal-Kohen | [Prof. Idith Tal-Kohen](https://www.linkedin.com/in/idith), IBM Cloud, Project Manager | **Presentation Section:**<br />- Agile methodologies and their application in project management and cloud computing projects.<br />**Hands-On Section:**<br />- Continue work on UniPath.io |
| 🔵 Feb 22nd | Week 6: Intro to AWS Lambda | Andrew A. | **Presentation Section:**<br />- Introduction to AWS Lambda and serverless computing, exploring how to build and deploy functions.<br />**Hands-On Section:**<br />- Continue work on UniPath.io |
| 🔵 Feb 29th | Week 7: Intro to Infrastructure as Code | Andrew A. | **Presentation Section:**<br />- Introduction to Infrastructure as Code, using tools like Terraform, to automate the setup and management of cloud infrastructure.<br />**Hands-On Section:**<br />- Work on UniPath.io |
| 🔴 Mar 7th | Week 8: No Meeting - Holiday | N/A | No meeting due to holiday. |
| 🔵 Mar 14th | Week 9: Work on UniPath.io Project | Club Members | **Hands-On Section:** Dedicated session for collaborative work on UniPath.io. No presentations; the focus is entirely on coding, designing, and advancing the project with the support of project leads. |
| 🔵 Mar 21st | Week 10: Work on UniPath.io Project | Club Members | **Hands-On Section:** Dedicated session for collaborative work on UniPath.io. No presentations; the focus is entirely on coding, designing, and advancing the project with the support of project leads. |
| 🔵 Mar 28th | Week 11: Work on UniPath.io Project | Club Members | **Hands-On Section:** Dedicated session for collaborative work on UniPath.io. No presentations; the focus is entirely on coding, designing, and advancing the project with the support of project leads. |
| 🔵 Apr 4th | Week 12: Work on UniPath.io Project | Club Members | **Hands-On Section:** Dedicated session for collaborative work on UniPath.io. No presentations; the focus is entirely on coding, designing, and advancing the project with the support of project leads. |
| 🔵 Apr 11th | Week 13: Work on UniPath.io Project | Club Members | **Hands-On Section:** Dedicated session for collaborative work on UniPath.io. No presentations; the focus is entirely on coding, designing, and advancing the project with the support of project leads. |
| 🔵 Apr 18th | Week 14: Present UniPath.io | Club Members | **Presentation Section:** We will be presenting UniPath.io to our club [Faculty Advisor](https://www.uml.edu/sciences/computer-science/people/weis-johannes.aspx), and discussing our technology stack and current progress. |
| ❌ Apr 25th | Week 15: Guest Speaker | [Brennan Macaig](https://www.linkedin.com/in/brennan-macaig), SRE | **Presentation Section:**<br />- TBD<br />**Hands-On Section:**<br />- TBD |

(Note: The schedule is tentative and expected to change. The topics and descriptions for subsequent meetings will be updated as we progress through the semester.)
23 changes: 23 additions & 0 deletions docusaurus.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,9 @@ const config = {
({
// Replace with your project's social card
image: 'img/logo_icon.png',
colorMode: {
respectPrefersColorScheme: true,
},
navbar: {
title: 'UML Cloud Computing Club',
logo: {
Expand All @@ -88,6 +91,13 @@ const config = {
},
items: [

// Schedule
{
position: 'left',
label: 'Schedule',
to: '/docs/Meeting Schedule',
},

// Projects
{
type: 'docSidebar',
Expand Down Expand Up @@ -117,6 +127,13 @@ const config = {
position: 'left',
label: 'News',
},

// FAQ
{
position: 'left',
label: 'FAQ',
to: '/docs/Getting Started and FAQ',
},

// Github
{
Expand Down Expand Up @@ -145,6 +162,12 @@ const config = {
label: 'LinkedIn',
position: 'right',
},

// Sign In
{
type: 'custom-accountButton',
position: 'right',
},
],
},
footer: {
Expand Down
27 changes: 27 additions & 0 deletions src/components/NavbarItems/AccountButton.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import Button from '@mui/material/Button';
import { useColorMode } from '@docusaurus/theme-common';
import LogoutIcon from '@mui/icons-material/Logout'
import { Link as RouterLink } from 'react-router-dom';
import SignIn from '../../pages/SignIn';


export default function AccountButton() {
const isLoggedIn = false;
// const { colorMode } = useColorMode();
// const isDarkMode = colorMode === 'dark';

// const handleLogout = (event) => {

// };


// const loginButton = <Button size='small' variant="text" component={RouterLink} to="SignIn" startIcon = { <LoginIcon/> }>{ 'Login' }</Button>;
// const logoutButton = <Button size='small' variant="text" component={RouterLink} to="SignIn" startIcon = { <LogoutIcon/> }>{ 'Logout' }</Button>;

const loginButton = <SignIn/>;

const logoutButton = <Button variant='text' component={RouterLink} to="" startIcon={ <LogoutIcon/> }>Logout</Button>;
return (
(isLoggedIn ? logoutButton : loginButton)
);
}
16 changes: 15 additions & 1 deletion src/css/custom.css
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,20 @@
--docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3);
}

.acrylic {
/* Parent background + Gaussian blur */
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px); /* Safari */

/* Exclusion blend */
background-blend-mode: exclusion;

/* Color/tint overlay + Opacity */
background: rgba(255, 255, 255, .6);

/* Tiled noise texture */
background-image: url(data:image/png;base64,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);
}

/* FontAwesome */
.navbar__icon {
Expand Down Expand Up @@ -64,4 +78,4 @@ footer {

.navbar__github:hover {
background: var(--ifm-color-emphasis-200);
}
}
Loading

0 comments on commit 0cb26c7

Please sign in to comment.