Skip to content

Commit 0cb26c7

Browse files
authored
Merge pull request #15 from UMLCloudComputing/feat--landing-page-schedule
Feat landing page schedule, getting started, sign in modal, submodules init
2 parents 4d1067d + b8fc225 commit 0cb26c7

File tree

132 files changed

+37218
-4
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

132 files changed

+37218
-4
lines changed

.gitmodules

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
[submodule "rowdybot"]
2+
path = submodules/rowdybot
3+
url = git@github.com:UMLCloudComputing/rowdybot.git
4+
[submodule "UniPath.io"]
5+
path = submodules/UniPath.io
6+
url = git@github.com:UMLCloudComputing/UniPath.io.git

account_automation_script.py

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
# Author: Gurpreet Singh
2+
# Date: 7/1/2024
3+
# Copyright 2024
4+
# Property of UML Cloud Computing Club
5+
6+
## WIP
7+
8+
import boto3
9+
import argparse
10+
import secrets
11+
import string
12+
import sys
13+
import logging
14+
15+
logger = logging.getLogger(__name__)
16+
17+
DEFAULT_PASSWORD = "Cloud@computing1"
18+
19+
def create_random_password(length = 16) -> str:
20+
chars = string.ascii_letters + string.digits + string.punctuation
21+
password = ""
22+
for i in range(length):
23+
password += secrets.choice(chars)
24+
logger.info(f"Password created, length: {length}")
25+
return password
26+
27+
def create_user(args, username: str, password=None, policy_group=None):
28+
iam = boto3.client("iam")
29+
# Check if user exists
30+
try:
31+
iam.get_user(UserName = username)
32+
if (args.verbose):
33+
print(f"IAM User Creation failed: Username taken")
34+
if (args.logging):
35+
logger.warning("IAM User Creation failed: Username taken")
36+
except iam.exceptions.NoSuchEntityException:
37+
try:
38+
if password is None:
39+
password = create_random_password()
40+
iam.create_user(UserName=username)
41+
iam.create_login_profile(UserName=username, Password=password, PasswordResetRequired=True)
42+
if (args.verbose):
43+
print(f"New IAM user '{username}' created sucessfully with password: '{password}'. Be sure to change ASAP.")
44+
if (args.logging):
45+
logger.info(f"New IAM user '{username}' created sucessfully with password: '{password}'.")
46+
47+
if policy_group is not None:
48+
try:
49+
iam.add_user_to_group(GroupName='UML_Students', UserName=username)
50+
if (args.verbose):
51+
print(f"Policy group {policy_group} added to '{username}'")
52+
if (args.logging):
53+
logger.error(f"Policy group {policy_group} added to '{username}'")
54+
except Exception as e:
55+
if (args.verbose):
56+
print(f"Error adding '{username}' to the policy group '{policy_group}'. {e}")
57+
if (args.logging):
58+
logger.error(f"Error adding '{username}' to policy group '{policy_group}'. {e}")
59+
except Exception as e:
60+
# ADD VERBOSE
61+
if (args.verbose):
62+
print(f"Error creating the new IAM user '{username}'. {e}")
63+
if (args.logging):
64+
logger.error(f"Error creating IAM user '{username}'. {e}")
65+
66+
67+
if __name__== "__main__":
68+
parser = argparse.ArgumentParser(
69+
prog = 'account_automation_script.py',
70+
description="AWS IAM User Creation Automation using Python",
71+
epilog="Contact the UML Cloud Computing Discord for help or to report any issues: https://discord.gg/7ETpHA33",
72+
)
73+
74+
# Argument groups
75+
file_group = parser.add_argument_group("Batch User Creation", "Argument for batch creation of new IAM users via a file")
76+
single_user_group = parser.add_argument_group("Single User Creation", "Arguments for creating a single new IAM user")
77+
log_verbose_group = parser.add_argument_group("Logging/Verbose", "Arguments related to logging and info")
78+
79+
# Runtime arguments
80+
single_user_group.add_argument('-u', '--username', action="store", type=str, help="The username for the new IAM user")
81+
parser.add_argument('--use_default_pswd', action='store_true', help="Whether or not to use the default password: 'Cloud@computing1'", default=False)
82+
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)
83+
file_group.add_argument('--filename', type=str, help="Filename for file that contains IAM user details, seperated by newlines. Format: (username policy_group\\n)")
84+
log_verbose_group.add_argument('-v', '--verbose', action="store_true", help="Enable verbose mode")
85+
log_verbose_group.add_argument('--logging', action="store_true", help="Enable logging to a file")
86+
args = parser.parse_args()
87+
88+
# Manual mutually exclusive arugment checking because argparse cannot do this natively
89+
if args.filename and (args.username or args.policy_group):
90+
print("--filename and --username|--policy_group are mutually exclusive arguments")
91+
if (args.logging):
92+
logger.error("Invalid runtime argument combination (f&(u|p))")
93+
sys.exit(2)
94+
95+
if args.username and not args.policy_group:
96+
print("Policy group not specified for user. Please specify via --policy_group.")
97+
if (args.logging):
98+
logger.error("Invalid runtime argument combination (u!p)")
99+
sys.exit(2)
100+
101+
if args.policy_group and not args.username:
102+
print("Username not specified. Please specify via --username")
103+
if (args.logging):
104+
logger.error("Invalid runtime argument combination (p!u)")
105+
sys.exit(2)
106+
107+
108+
password = DEFAULT_PASSWORD if args.use_default_pswd else None
109+
110+
if not any(vars(args).values()):
111+
parser.print_help()
112+
sys.exit()
113+
114+
if args.filename:
115+
with open(args.filename, 'r') as file:
116+
lines = file.read().splitlines()
117+
for line in lines:
118+
username, policy_group = line.split()
119+
create_user(args, username, password, policy_group)
120+
else:
121+
create_user(args, args.username, password, args.policy_group)

docs/Getting Started and FAQ.md

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
2+
[![Website](https://img.shields.io/badge/Website-UML%20Engage-blue.svg?style=for-the-badge)](https://umasslowellclubs.campuslabs.com/engage/organization/cloudcomputingclub)
3+
[![Discord](https://img.shields.io/discord/890983857938116729?logo=discord&logoColor=white&style=for-the-badge)](https://discord.gg/WC2NdqYtDt)
4+
[![Email](https://img.shields.io/badge/Email-cloudcomputingclub%40uml.edu-red.svg?logo=gmail&logoColor=white&style=for-the-badge)](mailto:cloudcomputingclub@uml.edu)
5+
6+
# UMass Lowell Cloud Computing Club
7+
8+
## 🚀 Getting Involved
9+
10+
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).
11+
12+
Feel free to reach out to our club leaders for more information. We look forward to seeing you!
13+
14+
## 💬 Frequently Asked Questions (FAQ)
15+
16+
#### Q: Who can join the UMass Lowell Cloud Computing Club?
17+
**A**: The club is open to all UMass Lowell students, faculty, and staff, regardless of their experience level with cloud computing.
18+
19+
#### Q: How do I join the club?
20+
**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.
21+
22+
### Meetings
23+
24+
#### Q: When and where are the meetings held?
25+
**A**: The meeting schedule is outlined in the README. The location will be announced prior to each meeting.
26+
27+
#### Q: Can I attend meetings virtually?
28+
**A**: Yes, you can! All our meetings are also accessible virtually via our [Discord server](https://discord.gg/WC2NdqYtDt).
29+
30+
#### Q: What if I miss a meeting?
31+
**A**: Don't worry! Meeting materials and summaries will be uploaded to the respective week's folder in our GitHub repository.
32+
33+
### Projects
34+
35+
#### Q: Do I need prior experience to contribute to the project?
36+
**A**: No, you don't need prior experience. We aim to make the project inclusive for members at all skill levels.
37+
38+
#### Q: How can I contribute to the project?
39+
**A**: Contributions can be made through our project repository on GitHub. More details can be found in the "Project Repository" section of this README.
40+
41+
### Technologies
42+
43+
#### Q: Do I need to know all the technologies listed to participate?
44+
**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.
45+
46+
#### Q: What if I'm interested in a technology not listed?
47+
**A**: We're open to exploring new technologies! Feel free to bring it up during meetings or on our Discord server.
48+
49+
### Contact
50+
51+
#### Q: How can I contact the club leaders?
52+
**A**: You can reach out to us via our [Discord server](https://discord.gg/WC2NdqYtDt) or by sending an email to [cloudcomputingclub@uml.edu](mailto:cloudcomputingclub@uml.edu).
53+
54+
---
55+
56+
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.

docs/Meeting Schedule.md

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
[![Website](https://img.shields.io/badge/Website-UML%20Engage-blue.svg?style=for-the-badge)](https://umasslowellclubs.campuslabs.com/engage/organization/cloudcomputingclub)
2+
[![Discord](https://img.shields.io/discord/890983857938116729?logo=discord&logoColor=white&style=for-the-badge)](https://discord.gg/WC2NdqYtDt)
3+
[![Email](https://img.shields.io/badge/Email-cloudcomputingclub%40uml.edu-red.svg?logo=gmail&logoColor=white&style=for-the-badge)](mailto:cloudcomputingclub@uml.edu)
4+
5+
# UMass Lowell Cloud Computing Club: Fall 2024
6+
7+
## 📆 Meeting Schedule
8+
9+
**Events & Meeting Location**: https://sesh.fyi/dashboard/890983857938116729/events?view=calendar
10+
11+
**Meeting Time**: Every meeting will be Thursday from 6:30pm-9:30pm.
12+
13+
- **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.
14+
15+
- **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.
16+
17+
Legend
18+
- 🟢 Meetings with confirmed speakers and topics
19+
- 🟡 Meeting details TBD/not yet confirmed
20+
- 🔴 Meetings not planned
21+
- 🔵 Completed meetings
22+
23+
| Date | Week and Topic | Speaker | Description |
24+
|-------------|-------------------------------|--------------|--------------|
25+
| 🔵 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 |
26+
| 🔵 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 |
27+
| 🔵 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 |
28+
| 🔵 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 |
29+
| 🔵 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 |
30+
| 🔵 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 |
31+
| 🔵 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 |
32+
| 🔴 Mar 7th | Week 8: No Meeting - Holiday | N/A | No meeting due to holiday. |
33+
| 🔵 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. |
34+
| 🔵 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. |
35+
| 🔵 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. |
36+
| 🔵 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. |
37+
| 🔵 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. |
38+
| 🔵 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. |
39+
| ❌ 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 |
40+
41+
(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.)

docusaurus.config.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,9 @@ const config = {
8080
({
8181
// Replace with your project's social card
8282
image: 'img/logo_icon.png',
83+
colorMode: {
84+
respectPrefersColorScheme: true,
85+
},
8386
navbar: {
8487
title: 'UML Cloud Computing Club',
8588
logo: {
@@ -88,6 +91,13 @@ const config = {
8891
},
8992
items: [
9093

94+
// Schedule
95+
{
96+
position: 'left',
97+
label: 'Schedule',
98+
to: '/docs/Meeting Schedule',
99+
},
100+
91101
// Projects
92102
{
93103
type: 'docSidebar',
@@ -117,6 +127,13 @@ const config = {
117127
position: 'left',
118128
label: 'News',
119129
},
130+
131+
// FAQ
132+
{
133+
position: 'left',
134+
label: 'FAQ',
135+
to: '/docs/Getting Started and FAQ',
136+
},
120137

121138
// Github
122139
{
@@ -145,6 +162,12 @@ const config = {
145162
label: 'LinkedIn',
146163
position: 'right',
147164
},
165+
166+
// Sign In
167+
{
168+
type: 'custom-accountButton',
169+
position: 'right',
170+
},
148171
],
149172
},
150173
footer: {
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import Button from '@mui/material/Button';
2+
import { useColorMode } from '@docusaurus/theme-common';
3+
import LogoutIcon from '@mui/icons-material/Logout'
4+
import { Link as RouterLink } from 'react-router-dom';
5+
import SignIn from '../../pages/SignIn';
6+
7+
8+
export default function AccountButton() {
9+
const isLoggedIn = false;
10+
// const { colorMode } = useColorMode();
11+
// const isDarkMode = colorMode === 'dark';
12+
13+
// const handleLogout = (event) => {
14+
15+
// };
16+
17+
18+
// const loginButton = <Button size='small' variant="text" component={RouterLink} to="SignIn" startIcon = { <LoginIcon/> }>{ 'Login' }</Button>;
19+
// const logoutButton = <Button size='small' variant="text" component={RouterLink} to="SignIn" startIcon = { <LogoutIcon/> }>{ 'Logout' }</Button>;
20+
21+
const loginButton = <SignIn/>;
22+
23+
const logoutButton = <Button variant='text' component={RouterLink} to="" startIcon={ <LogoutIcon/> }>Logout</Button>;
24+
return (
25+
(isLoggedIn ? logoutButton : loginButton)
26+
);
27+
}

src/css/custom.css

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,20 @@
3131
--docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3);
3232
}
3333

34+
.acrylic {
35+
/* Parent background + Gaussian blur */
36+
backdrop-filter: blur(10px);
37+
-webkit-backdrop-filter: blur(10px); /* Safari */
38+
39+
/* Exclusion blend */
40+
background-blend-mode: exclusion;
41+
42+
/* Color/tint overlay + Opacity */
43+
background: rgba(255, 255, 255, .6);
44+
45+
/* Tiled noise texture */
46+
background-image: url(data:image/png;base64,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);
47+
}
3448

3549
/* FontAwesome */
3650
.navbar__icon {
@@ -64,4 +78,4 @@ footer {
6478

6579
.navbar__github:hover {
6680
background: var(--ifm-color-emphasis-200);
67-
}
81+
}

0 commit comments

Comments
 (0)