diff --git a/suchwowx/models.py b/suchwowx/models.py index c921084..5eec059 100644 --- a/suchwowx/models.py +++ b/suchwowx/models.py @@ -27,12 +27,12 @@ class User(db.Model): __tablename__ = 'users' id = db.Column(db.Integer, primary_key=True) - register_date = db.Column(db.DateTime, default=datetime.utcnow()) + register_date = db.Column(db.DateTime, default=datetime.utcnow) last_login_date = db.Column(db.DateTime, nullable=True) verified = db.Column(db.Boolean, default=False) public_address = db.Column(db.String(180)) nonce = db.Column(db.String(180), default=rand_id()) - nonce_date = db.Column(db.DateTime, default=datetime.utcnow()) + nonce_date = db.Column(db.DateTime, default=datetime.utcnow) handle = db.Column(db.String(40), unique=True) bio = db.Column(db.String(600), nullable=True) profile_image = db.Column(db.String(300), nullable=True) @@ -95,7 +95,7 @@ class Meme(db.Model): __tablename__ = 'memes' id = db.Column(db.String(80), default=rand_id, primary_key=True) - create_date = db.Column(db.DateTime, default=datetime.utcnow()) + create_date = db.Column(db.DateTime, default=datetime.utcnow) file_name = db.Column(db.String(200), unique=True) meta_ipfs_hash = db.Column(db.String(100), unique=True, nullable=True) meme_ipfs_hash = db.Column(db.String(100), unique=True, nullable=True) diff --git a/suchwowx/routes/api.py b/suchwowx/routes/api.py index d598657..cbf65cb 100644 --- a/suchwowx/routes/api.py +++ b/suchwowx/routes/api.py @@ -54,6 +54,14 @@ def update_user(): if _u: if current_user.id == _u.id: + user_exists = User.query.filter( + User.handle == data['handle'] + ).first() + if user_exists and not current_user.id == user_exists.id: + return jsonify({ + 'success': False, + 'message': 'That user handle already exists on this server' + }) _u.wownero_address = data['wownero_address'] _u.ipfs_hash = data['ipfs_hash'] _u.handle = data['handle'] diff --git a/suchwowx/static/css/custom.css b/suchwowx/static/css/custom.css index 53be0d1..afdf0e6 100644 --- a/suchwowx/static/css/custom.css +++ b/suchwowx/static/css/custom.css @@ -23,3 +23,7 @@ max-height: 200px; object-fit: cover; } + +.wrap { + word-wrap: break-word; +} diff --git a/suchwowx/templates/profile.html b/suchwowx/templates/profile.html index 88efd2b..13f1cff 100644 --- a/suchwowx/templates/profile.html +++ b/suchwowx/templates/profile.html @@ -15,13 +15,13 @@
-

From Avax Chain

-

Handle: ?

-

Wownero Address: ?

-

Profile IPFS Hash: ?

-

Tipped AVAX: ?

-

Tipped WOWX: ?

-

Tipped WOW: ?

+

From Avalanche Blockchain

+

Handle: ?

+

Wownero Address: ?

+

Profile IPFS Hash: ?

+

Tipped AVAX: ?

+

Tipped WOWX: ?

+

Tipped WOW: ?



From Local Database

@@ -37,26 +37,23 @@

Wownero Address: {% if is_user %} - + Publish AVAX {% else %} - {{ user.wownero_address }} + {{ user.wownero_address }} {% endif %}

Metadata IPFS Hash: {% if is_user %} - + Publish AVAX {% else %} {{ user.ipfs_hash }} {% endif %}

- {% if is_user %} -

Save DB

- {% endif %}

Register Date: {{ user.register_date }}

-

Login Date: {{ user.last_login_date }}

+

Last Login Date: {{ user.last_login_date }}

Moderator: {{ user.is_moderator() }}

Verified: {{ user.verified }}

Memes Posted: {{ user.memes | length }}

@@ -66,6 +63,9 @@ {% if user.website %}

Website: {{ user.website_url }}

{% endif %} + {% if is_user %} +


Save DB

+ {% endif %}
@@ -109,7 +109,7 @@ notif('Updated user information in this server\'s database', 'success'); notif('Publish to AVAX to make the data more available', 'info'); } else { - notif('There was an issue posting data to the API. Try again later.', 'error'); + notif(data['message'], 'error'); } }) } @@ -118,10 +118,10 @@ async function fetchUserProfile() { _walletAddress = w3.utils.toChecksumAddress('{{ user.public_address }}'); const userProfile = await contract.methods.userProfile(_walletAddress).call(); - document.getElementById('userHandle').innerHTML = userProfile.userHandle; - document.getElementById('wowneroAddress').innerHTML = userProfile.wowneroAddress; - document.getElementById('metadataIPFSHash').innerHTML = userProfile.metadataIPFSHash; - document.getElementById('tippedAVAX').innerHTML = userProfile.tippedAVAX; + if (userProfile.userHandle){document.getElementById('userHandle').innerHTML = userProfile.userHandle}; + if (userProfile.wowneroAddress){document.getElementById('wowneroAddress').innerHTML = userProfile.wowneroAddress}; + if (userProfile.metadataIPFSHash){document.getElementById('metadataIPFSHash').innerHTML = userProfile.metadataIPFSHash}; + if (userProfile.tippedAVAX){document.getElementById('tippedAVAX').innerHTML = userProfile.tippedAVAX}; document.getElementById('tippedWOWX').innerHTML = 0; return } @@ -136,14 +136,19 @@ const gasLimit = await contract.methods.setUserHandle(handle).estimateGas(function(err, gas){ return gas; }); - console.log(`Attempting to update user handle ${handle} with gas limit of ${gasLimit} gas and gas price of ${gasPrice}`); - let res = await contract.methods.setUserHandle(handle).send({ - from: walletAddress, - value: 0, - gasPrice: gasPrice, - gas: gasLimit - }); - console.log(res); + try { + notif(`Publishing user handle "${handle}" to the Avalanche blockchain.`, 'info'); + let res = await contract.methods.setUserHandle(handle).send({ + from: walletAddress, + value: 0, + gasPrice: gasPrice, + gas: gasLimit + }); + console.log(res); + window.location.href = ""; + } catch(e) { + notif(e.message, 'warning'); + } } async function publishWowneroAddress() { @@ -156,14 +161,19 @@ const gasLimit = await contract.methods.setUserWowneroAddress(address).estimateGas(function(err, gas){ return gas; }); - console.log(`Attempting to update Wownero address ${address} with gas limit of ${gasLimit} gas and gas price of ${gasPrice}`); - let res = await contract.methods.setUserWowneroAddress(address).send({ - from: walletAddress, - value: 0, - gasPrice: gasPrice, - gas: gasLimit - }); - console.log(res); + try { + notif(`Publishing Wownero address "${address.slice(0, 6)}...${address.slice(-6)}" to the Avalanche blockchain.`, 'info'); + let res = await contract.methods.setUserWowneroAddress(address).send({ + from: walletAddress, + value: 0, + gasPrice: gasPrice, + gas: gasLimit + }); + console.log(res); + window.location.href = ""; + } catch(e) { + notif(e.message, 'warning'); + } } async function publishMetadataIPFSHash() { @@ -176,14 +186,19 @@ const gasLimit = await contract.methods.setUserMetadata(_hash).estimateGas(function(err, gas){ return gas; }); - console.log(`Attempting to update user metadata hash ${_hash} with gas limit of ${gasLimit} gas and gas price of ${gasPrice}`); - let res = await contract.methods.setUserMetadata(_hash).send({ - from: walletAddress, - value: 0, - gasPrice: gasPrice, - gas: gasLimit - }); - console.log(res); + try { + notif(`Publishing user profile metadata IPFS hash ${_hash} to the Avalanche network.`, 'info'); + let res = await contract.methods.setUserMetadata(_hash).send({ + from: walletAddress, + value: 0, + gasPrice: gasPrice, + gas: gasLimit + }); + console.log(res); + window.location.href = ""; + } catch(e) { + notif(e.message, 'warning'); + } } window.addEventListener('DOMContentLoaded', () => {