Compare commits
7 Commits
combine-do
...
integrate-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
62dcfab912 | ||
|
|
6c6cccae49 | ||
|
|
7612837e82 | ||
|
|
fdbced9192 | ||
|
|
99a0df522e | ||
|
|
1b177e3d86 | ||
|
|
d3c8d6e544 |
2
.env
2
.env
@@ -1,2 +1,4 @@
|
||||
obsidian_vault=/home/venus/Documents/Personal-Wiki
|
||||
obsidian_vault_url=https://git.riverrooks.dev/Personal-Wiki
|
||||
obsidian_vault_token=bd8cd9301ae2c1c5bacfb3340492acb5e862686a
|
||||
|
||||
|
||||
16
Dockerfile
Executable file
16
Dockerfile
Executable file
@@ -0,0 +1,16 @@
|
||||
FROM python:3.14-slim
|
||||
|
||||
ARG DEBUG_MODE=0
|
||||
ENV FLASK_DEBUG=$DEBUG_MODE
|
||||
ENV FLASK_APP=app
|
||||
|
||||
RUN mkdir /app
|
||||
COPY app/requirements.txt /app
|
||||
RUN pip3 install -r /app/requirements.txt
|
||||
|
||||
COPY app /app
|
||||
|
||||
ENTRYPOINT ["flask"]
|
||||
CMD ["run", "--host=0.0.0.0", "--port=80"]
|
||||
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
FROM python:3.10-slim AS builder
|
||||
|
||||
ARG DEBUG_MODE=0
|
||||
ENV FLASK_DEBUG=$DEBUG_MODE
|
||||
ENV FLASK_APP=app
|
||||
|
||||
|
||||
|
||||
COPY requirements.txt
|
||||
|
||||
RUN pip3 install -r requirements.txt
|
||||
|
||||
COPY . .
|
||||
|
||||
|
||||
EXPOSE 443
|
||||
ENTRYPOINT ["flask"]
|
||||
# CMD [ "run", "--host=0.0.0.0", "--port=80"]
|
||||
CMD ["--app", "app", "run", "--host=0.0.0.0", "--port=443"]
|
||||
|
||||
|
||||
@@ -1,35 +0,0 @@
|
||||
from flask import Flask
|
||||
import markdown
|
||||
from pathlib import Path
|
||||
|
||||
app = Flask(__name__)
|
||||
|
||||
CONTENT_DIR = Path(__file__).parent.parent / "content"
|
||||
|
||||
@app.route("/hello")
|
||||
def hello_world():
|
||||
return "<h1>Hello, World!</h1>"
|
||||
|
||||
@app.route("/")
|
||||
def index():
|
||||
# Write your markdown content
|
||||
md_content = "# Welcome to my blog!\nThis is rendered from **Markdown**."
|
||||
# Convert it to HTML
|
||||
html_content = markdown.markdown(md_content)
|
||||
return html_content
|
||||
|
||||
@app.route ("/post/<filename>")
|
||||
def render_markdown_file(filename):
|
||||
filePath = CONTENT_DIR / f"{filename}.md"
|
||||
# 3. Protect against missing files
|
||||
if not filePath.is_file():
|
||||
return f"<h1>404</h1><p>Could not find {filename}.md in {filePath}</p>", 404
|
||||
# else:
|
||||
# return f"<h1> found</h1> <p> found {filename} in {filePath}</p>"
|
||||
# 4. Open, read, and convert the file
|
||||
with open(filePath, "r", encoding="utf-8") as f:
|
||||
textContent = f.read()
|
||||
|
||||
htmlContent = markdown.markdown(textContent)
|
||||
|
||||
return htmlContent
|
||||
23
app/__init__.py
Normal file
23
app/__init__.py
Normal file
@@ -0,0 +1,23 @@
|
||||
from flask import Flask
|
||||
from app import build
|
||||
from pathlib import Path
|
||||
import markdown
|
||||
|
||||
app = Flask(__name__)
|
||||
|
||||
CONTENT_DIR = Path("/content")
|
||||
|
||||
@app.route("/")
|
||||
def index():
|
||||
# Write your markdown content
|
||||
md_content = "# Welcome to my blog!\nThis is rendered from **Markdown**.\n##[test](http://localhost/test)"
|
||||
# Convert it to HTML
|
||||
html_content = markdown.markdown(md_content)
|
||||
return html_content
|
||||
|
||||
@app.route ("/<filename>")
|
||||
def render_post(filename):
|
||||
return build.render_file(filename, CONTENT_DIR)
|
||||
# return "test"
|
||||
|
||||
# return rm(filename)
|
||||
47
app/build.py
47
app/build.py
@@ -1,26 +1,39 @@
|
||||
from obsidian_parser import Vault
|
||||
import shutil
|
||||
from git import Repo
|
||||
import markdown
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
def render_file(filename: str, contentPath: Path): #renders markwown from filename
|
||||
filePath = contentPath / f"{filename}.md"
|
||||
# 3. Protect against missing files
|
||||
if not filePath.is_file():
|
||||
return f"<h1>404</h1><p>Could not find {filename}.md in {filePath}</p>", 404
|
||||
# open the file for reading
|
||||
with open(filePath, "r", encoding="utf-8") as f:
|
||||
textContent = f.read()
|
||||
# convert it to markdown
|
||||
htmlContent = markdown.markdown(textContent)
|
||||
return htmlContent
|
||||
|
||||
def clone_secure_repo(url: str, token: str = "", dest: str): # clone a gittea repo using optional security token into dest dirand return a path to the directory
|
||||
return dest
|
||||
print("build imported")
|
||||
# def clone_gittea_repo(url: str, token: str = "", dest: str): # clone a gittea repo using optional security token into dest dirand return a path to the directory
|
||||
# return dest
|
||||
|
||||
def public_notes(src: str): # return a list of notes tagged with public from an obsidian directory
|
||||
# build vault from source
|
||||
vault = Vault(src)
|
||||
if vault:
|
||||
print ("found vault")
|
||||
else:
|
||||
print("could not find vault")
|
||||
return []
|
||||
# def public_notes(src: str): # return a list of notes tagged with public from an obsidian directory
|
||||
# # build vault from source
|
||||
# vault = Vault(src)
|
||||
# if vault:
|
||||
# print ("found vault")
|
||||
# else:
|
||||
# print("could not find vault")
|
||||
# return []
|
||||
|
||||
# return a list ofnotes
|
||||
return vault.get_notes_with_tag("public")
|
||||
# # return a list ofnotes
|
||||
# return vault.get_notes_with_tag("public")
|
||||
|
||||
|
||||
def buld_public_vault(src: str, dest: str): # build the public vault in dest from an obsidian repo in src
|
||||
for note in public_notes(src):
|
||||
print(note.title)
|
||||
shutil.copy2(f"{note.path}", dest)
|
||||
# def buld_public_vault(src: str, dest: str): # build the public vault in dest from an obsidian repo in src
|
||||
# for note in public_notes(src):
|
||||
# print(note.title)
|
||||
# shutil.copy2(f"{note.path}", dest)
|
||||
|
||||
@@ -1,2 +1,5 @@
|
||||
flask
|
||||
markdown
|
||||
obsidianmd-parser
|
||||
GitPython
|
||||
py-gitea
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
services:
|
||||
app:
|
||||
build:
|
||||
context: app
|
||||
args:
|
||||
- DEBUG_MODE=1
|
||||
ports:
|
||||
|
||||
@@ -1,75 +0,0 @@
|
||||
#public
|
||||
- **Cyber Crime**: Use computer/digital device to further illegal ends
|
||||
> "nothings black and white in what we do, everything's got some gray"
|
||||
## Types of crime
|
||||
- **Crimes Against People**: A digital crime where the victim is a person
|
||||
- **Crimes Against Property**: A digital crime that damages, or illegally interacts with property
|
||||
- **Crimes Against Government**: A digital crime to undermine the efficacy of a government
|
||||
> Life is not Black and White, Consider what the greatest impact is
|
||||
|
||||
| Crime | category |
|
||||
| --- | --- |
|
||||
| Harrassement | People |
|
||||
| Stalking | People |
|
||||
| Credit Card fraud | People |
|
||||
| Id theft | People |
|
||||
| DOS attack | Property |
|
||||
| Hacking | Property |
|
||||
| Vandalism | Property |
|
||||
| Cyber Warfare | Government|
|
||||
| Cyber Terrorism | Government|
|
||||
|
||||
> Online Harassment is a growing field, stalking, bullying, doxing, etc.
|
||||
|
||||
> Modern wars be started with infrastructure hacks, Power grid hacks of Ukraine, Iran, Etc.
|
||||
|
||||
### Cyber-stalking and bullying
|
||||
- **Cyber Bulling**: People attacking reputation and self esteem of other people trough online means like social media campaigns.
|
||||
- **Cyber Stalking**: Stalking someone through their online footprint. Often to find information with which to exploit the victim.
|
||||
> Typically older person stalking a younger person. As opposed to bullying, which is usually across the same age
|
||||
### Cyber Terrorism
|
||||
- **Cyber Terrorism**: Politically motivated attacks on major infrastructure Money can be a factor, but usually the political is the primary motivation
|
||||
- Instill fear in a society to elicit some reaction
|
||||
- financial/reputation gain
|
||||
- revenge
|
||||
- etc.
|
||||
|
||||
## Examples
|
||||
Stux-Net
|
||||
Nation-state attacks on power grids before Wars
|
||||
|
||||
- **Sneaker Net**: Moving information across barriers physicality
|
||||
> proving an attack is one of the hardest questions to answer
|
||||
# U.S. National cyber strategy
|
||||
- **U.S. National cyber strategy**: anually updated policy document from the white house detailing the national cyber objectives
|
||||
|
||||
> it has been similar last few years
|
||||
|
||||
- promote American people
|
||||
- promoting American prosperity
|
||||
- preserve peace through strength
|
||||
- deterrent
|
||||
- advanced American cyber influence
|
||||
- strong alliances
|
||||
- promote international policies
|
||||
- Shaping adversary behavior
|
||||
- regulatory environment
|
||||
- Federal government security
|
||||
- criticial infrastructure security
|
||||
- cyber skills workforce gap
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,82 +0,0 @@
|
||||
---
|
||||
tags:
|
||||
- public
|
||||
- notes
|
||||
- tutorial
|
||||
- code
|
||||
- project
|
||||
- blog
|
||||
---
|
||||
# So you need a website
|
||||
## Overview
|
||||
1. How do websites work
|
||||
2. 3 things that you need
|
||||
3. What are your options
|
||||
1. Premium
|
||||
2. Custom
|
||||
3. DIY
|
||||
1. Registering a domain
|
||||
1. What is DNS
|
||||
2. Picking a domain
|
||||
3. setting up a registrar
|
||||
2. Building a frontend
|
||||
1. Chat GPT
|
||||
2. DeepSite
|
||||
3. DIY options
|
||||
4. UX and frontend resources
|
||||
3. Setting up GH pages
|
||||
1. GH account
|
||||
2. Set up New Repo
|
||||
3. Importing Code
|
||||
4. Setting the DNS
|
||||
## how do websites work
|
||||
There are 3 main elements of the internet: your computer, the website's code, and the path between the two.
|
||||
You can download [this page]() and open it in your computer. Notice how your browser's address doesn't say "Https://%url%" but instead shows a file location on your own machine.
|
||||
The internet is the same phenomenon, but between multiple computers. URL, (the technical name for a link, or website address) simply stands for Universal Resource Locator and is just a way of telling your computer how to access a file on someone else's computer.*
|
||||
There are lots of complicated standards for how computers actually talk to each other. The most relevant here is DNS, which stands for Domain Name System. It is how we assign internet-connected computers (called servers) with human readable names. There are special DNS servers which are responsible for telling your computer where in the world a specific website is stored.
|
||||
A URL, a frontend, and server to host it are all that you need to create a website. I will explain how to simply and affordably (or even for free) set up each of these elements.
|
||||
|
||||
*url's can end in [.pdf](example), [.jpg](example), or other file extensions. Just like files on your computer.*
|
||||
## What do you need
|
||||
### A URL
|
||||
Simply a link that is going to point to your website. You can buy one from a domain registrar and configure it in just a few minutes.
|
||||
### A Website file to display
|
||||
This is what people will see when they visit your website.
|
||||
### A computer to display it on
|
||||
There are myriad ways to accomplish this from renting a server from someone, to putting on in your house, to taking advantage of already free web hosting tools. I'm going to show you how to use GitHub's* free hosting service
|
||||
|
||||
*GitHub is owned by Microsoft and is the largest code distribution and hosting service. Most companies and developers rely on it's services daily.*
|
||||
|
||||
## Getting A Domain
|
||||
The process of registering a domain takes only a few minutes, and a couple of steps.
|
||||
|
||||
There are a number of websites that control who has access to websites, and which servers they point to. They are all basically the same. I've picked out [namecheap](https://namecheap.com) for this tutorial.
|
||||
|
||||
To register a domain just head over to their site, find a domain that you want, and purchase it. Watch out for these:
|
||||
1. First year prices are often discounted. Watch for a renewal rate.
|
||||
2. Save your password somewhere. You will hopefully have this website for a long time, and you may have someone else manage it for you eventually.
|
||||
3. Marketable domains are often short and easy to spell. Imagine verbally telling someone how to visit the website.
|
||||
|
||||
Make sure to verify your email and save your login information, as we will be needing to log back in shortly.
|
||||
|
||||
### Building a frontend
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
---
|
||||
public: "true"
|
||||
tags:
|
||||
- public
|
||||
---
|
||||
# This is a test
|
||||
and this is p
|
||||
@@ -1,14 +0,0 @@
|
||||
FROM python:3.12-slim
|
||||
|
||||
|
||||
run mkdir /public-vault
|
||||
|
||||
WORKDIR /build
|
||||
|
||||
COPY requirements.txt .
|
||||
|
||||
RUN pip3 install -r requirements.txt
|
||||
|
||||
COPY . .
|
||||
|
||||
CMD ["python", "build.py"]
|
||||
@@ -1,25 +0,0 @@
|
||||
from obsidian_parser import Vault
|
||||
import shutil
|
||||
from git import Repo
|
||||
|
||||
|
||||
# repo_url = "https://gitlab.com/username/my-vault.git"
|
||||
dest = "/content"
|
||||
src = "Personal-Wiki"
|
||||
# Load a vault
|
||||
vault = Vault(src)
|
||||
|
||||
if vault:
|
||||
print ("found vault")
|
||||
else:
|
||||
print("could not find vault")
|
||||
|
||||
# Find notes by exact name
|
||||
note = vault.get_note("test")
|
||||
|
||||
# Findd all public notes
|
||||
publicNotes = vault.get_notes_with_tag("public")
|
||||
|
||||
for note in publicNotes:
|
||||
print(note.title)
|
||||
shutil.copy2(f"{note.path}", dest)
|
||||
@@ -1,2 +0,0 @@
|
||||
obsidianmd-parser
|
||||
GitPython
|
||||
Reference in New Issue
Block a user