Spaces:
Running
Running
File size: 3,468 Bytes
7405474 5398274 7405474 5398274 7405474 5398274 2d94c1e 5398274 0fa01ec 5398274 0fa01ec 5398274 0fa01ec 5398274 0fa01ec 5398274 0fa01ec 5398274 7405474 5398274 7405474 5398274 7405474 0fa01ec 7405474 5398274 7405474 5398274 ae1fcbd 5398274 7405474 756b14b 0fa01ec 2d94c1e 5398274 2d94c1e 5398274 7405474 5398274 7405474 0fa01ec 5398274 7405474 5398274 2d94c1e 7405474 5398274 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
import streamlit as st
import os
from PIL import Image
from neo4j import GraphDatabase
from chainguard.blockchain_logger import BlockchainLogger
# Blockchain Logger
blockchain_logger = BlockchainLogger()
# Neo4j Handler
class Neo4jHandler:
def __init__(self, uri, user, password):
self.driver = GraphDatabase.driver(uri, auth=(user, password))
def close(self):
self.driver.close()
def log_transaction(self, file_name, file_path, blockchain_hash):
"""Log transactions to Neo4j."""
with self.driver.session() as session:
session.write_transaction(self._create_transaction_node, file_name, file_path, blockchain_hash)
@staticmethod
def _create_transaction_node(tx, file_name, file_path, blockchain_hash):
tx.run(
"""
MERGE (t:Transaction {file_name: $file_name, file_path: $file_path, blockchain_hash: $blockchain_hash})
RETURN t
""",
file_name=file_name, file_path=file_path, blockchain_hash=blockchain_hash
)
# Metadata Logging
def log_metadata(file_name, tags, album):
"""Log metadata to Chagu blockchain."""
metadata = {"file_name": file_name, "tags": tags, "album": album}
block_details = blockchain_logger.log_data(metadata)
return block_details
# Streamlit Layout
st.title("Memora: Secure File Upload with Blockchain & Neo4j")
st.subheader("Securely upload, organize, and query your files")
# Directory for storing uploaded files
UPLOAD_DIR = "uploaded_files"
os.makedirs(UPLOAD_DIR, exist_ok=True)
# File Upload
uploaded_files = st.file_uploader("Upload your files", accept_multiple_files=True, type=['jpg', 'jpeg', 'png', 'mp4', 'avi'])
if uploaded_files:
# Neo4j Setup
neo4j_handler = Neo4jHandler(
uri="neo4j+s://0ca71b10.databases.neo4j.io",
user="neo4j",
password="XXX"
)
for uploaded_file in uploaded_files:
# Save file locally
file_path = os.path.join(UPLOAD_DIR, uploaded_file.name)
with open(file_path, "wb") as f:
f.write(uploaded_file.getbuffer())
st.success(f"File saved locally: {file_path}")
# Display file details
if uploaded_file.type.startswith('image'):
image = Image.open(uploaded_file)
st.image(image, caption=uploaded_file.name, use_column_width=True)
# Metadata Input
album = st.text_input(f"Album for {uploaded_file.name}", "Default Album")
tags = st.text_input(f"Tags for {uploaded_file.name} (comma-separated)", "")
if st.button(f"Log Metadata for {uploaded_file.name}"):
metadata = log_metadata(uploaded_file.name, tags.split(','), album)
blockchain_hash = metadata.get('block_hash', 'N/A')
neo4j_handler.log_transaction(uploaded_file.name, file_path, blockchain_hash)
st.write(f"Metadata logged successfully! Blockchain Details: {metadata}")
neo4j_handler.close()
# Blockchain Integrity Validation
if st.button("Validate Blockchain Integrity"):
is_valid = blockchain_logger.is_blockchain_valid()
st.write("Blockchain Integrity:", "Valid β
" if is_valid else "Invalid β")
# Query System
st.subheader("Query Files")
query = st.text_input("Enter your query (e.g., 'Good comedy')")
if st.button("Search"):
# Simulating query processing
result = {"response": f"Mock result for '{query}'"}
st.write(f"Query Result: {result['response']}")
|