mirror of
https://github.com/BreizhHardware/ntfy_alerts.git
synced 2026-01-19 00:47:33 +01:00
Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a270978728 | |||
| 2a7305a4cf | |||
| f5fc6e38da |
@@ -7,7 +7,7 @@
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
<script src="./script.js" defer></script>
|
||||
</head>
|
||||
<body class="bg-gradient-to-b from-cyan-500 to-fuchsia-500">
|
||||
<body class="bg-gradient-to-b from-stone-500 to-green-700">
|
||||
<div class="flex flex-col gap-2 justify-center items-center my-2 h-screen">
|
||||
<h1 class="text-4xl font-semibold leading-10 text-gray-900">Github-Ntfy</h1>
|
||||
<h1>Add a repo</h1>
|
||||
|
||||
@@ -28,5 +28,12 @@ http {
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
}
|
||||
location /delete_repo {
|
||||
proxy_pass http://127.0.0.1:5000;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
11
ntfy.py
11
ntfy.py
@@ -54,12 +54,14 @@ def get_latest_releases(watched_repos):
|
||||
if response.status_code == 200:
|
||||
release_info = response.json()
|
||||
changelog = get_changelog(repo)
|
||||
release_date = release_info.get('published_at', 'Release date not available')
|
||||
releases.append({
|
||||
"repo": repo,
|
||||
"name": release_info["name"],
|
||||
"tag_name": release_info["tag_name"],
|
||||
"html_url": release_info["html_url"],
|
||||
"changelog": changelog
|
||||
"changelog": changelog,
|
||||
"published_at": release_date
|
||||
})
|
||||
else:
|
||||
logger.error(f"Failed to fetch release info for {repo}")
|
||||
@@ -84,6 +86,8 @@ def send_to_ntfy(releases, auth, url):
|
||||
version_number = release['tag_name'] # Getting the version number
|
||||
app_url = release['html_url'] # Getting the application URL
|
||||
changelog = release['changelog'] # Getting the changelog
|
||||
release_date = release['published_at'] # Getting the release date
|
||||
release_date = release_date.replace("T", " ").replace("Z", "") # Formatting the release date
|
||||
|
||||
# Checking if the version has changed since the last time
|
||||
cursor.execute("SELECT version FROM versions WHERE repo=?", (app_name,))
|
||||
@@ -92,7 +96,7 @@ def send_to_ntfy(releases, auth, url):
|
||||
logger.info(f"The version of {app_name} has not changed. No notification sent.")
|
||||
continue # Move on to the next application
|
||||
|
||||
message = f"New version: {version_number}\nFor: {app_name}\nChangelog:\n{changelog}\n{app_url}"
|
||||
message = f"New version: {version_number}\nFor: {app_name}\nPublished on: {release_date}\nChangelog:\n{changelog}\n{app_url}"
|
||||
# Updating the previous version for this application
|
||||
cursor.execute("INSERT OR REPLACE INTO versions (repo, version, changelog) VALUES (?, ?, ?)",
|
||||
(app_name, version_number, changelog))
|
||||
@@ -129,6 +133,7 @@ if __name__ == "__main__":
|
||||
else:
|
||||
logger.error("Usage: python ntfy.py")
|
||||
logger.error(
|
||||
"auth: can be generataed by the folowing command: echo -n 'username:password' | base64 and need to be stored in a file named auth.txt")
|
||||
"auth: can be generataed by the folowing command: echo -n 'username:password' | base64 and need to be "
|
||||
"stored in a file named auth.txt")
|
||||
logger.error("NTFY_URL: the url of the ntfy server need to be stored in an environment variable named NTFY_URL")
|
||||
|
||||
|
||||
30
ntfy_api.py
30
ntfy_api.py
@@ -6,7 +6,6 @@ app = Flask(__name__)
|
||||
CORS(app)
|
||||
app.logger.setLevel("WARNING")
|
||||
|
||||
|
||||
def get_db_connection():
|
||||
conn = sqlite3.connect('/github-ntfy/watched_repos.db')
|
||||
conn.row_factory = sqlite3.Row
|
||||
@@ -57,5 +56,34 @@ def get_watched_repos():
|
||||
return jsonify(watched_repos)
|
||||
|
||||
|
||||
@app.route('/delete_repo', methods=['POST'])
|
||||
def delete_repo():
|
||||
data = request.json
|
||||
repo = data.get('repo')
|
||||
|
||||
# Vérifier si le champ 'repo' est présent dans les données JSON
|
||||
if not repo:
|
||||
return jsonify({"error": "The repo field is required."}), 400
|
||||
|
||||
# Établir une connexion à la base de données
|
||||
conn = get_db_connection()
|
||||
cursor = conn.cursor()
|
||||
|
||||
try:
|
||||
# Vérifier si le dépôt existe dans la base de données
|
||||
cursor.execute("SELECT * FROM watched_repos WHERE repo=?", (repo,))
|
||||
existing_repo = cursor.fetchone()
|
||||
if not existing_repo:
|
||||
return jsonify({"error": f"The repo {repo} is not in the database."}), 404
|
||||
|
||||
# Supprimer le dépôt de la base de données
|
||||
cursor.execute("DELETE FROM watched_repos WHERE repo=?", (repo,))
|
||||
conn.commit()
|
||||
return jsonify({"message": f"The repo {repo} as been deleted from the watched repos."})
|
||||
finally:
|
||||
# Fermer la connexion à la base de données
|
||||
close_db_connection(conn)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
app.run(debug=False)
|
||||
|
||||
38
script.js
38
script.js
@@ -32,7 +32,24 @@ function refreshWatchedRepos() {
|
||||
// Ajouter chaque dépôt surveillé à la liste
|
||||
data.forEach(repo => {
|
||||
const listItem = document.createElement('li');
|
||||
listItem.textContent = repo;
|
||||
const repoName = document.createElement('span');
|
||||
repoName.textContent = repo;
|
||||
repoName.className = 'repo-name';
|
||||
listItem.appendChild(repoName);
|
||||
|
||||
const deleteButton = document.createElement('button');
|
||||
deleteButton.textContent = ' X';
|
||||
deleteButton.className = 'delete-btn text-red-500 ml-2';
|
||||
deleteButton.addEventListener('click', () => {
|
||||
// Remove the repo from the watched repos
|
||||
// This is a placeholder. Replace it with your actual code to remove the repo from the watched repos.
|
||||
removeRepoFromWatchedRepos(repo);
|
||||
|
||||
// Remove the repo from the DOM
|
||||
listItem.remove();
|
||||
});
|
||||
listItem.appendChild(deleteButton);
|
||||
|
||||
watchedReposList.appendChild(listItem);
|
||||
});
|
||||
})
|
||||
@@ -41,5 +58,24 @@ function refreshWatchedRepos() {
|
||||
});
|
||||
}
|
||||
|
||||
function removeRepoFromWatchedRepos(repo) {
|
||||
fetch('/delete_repo', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Access-Control-Allow-Origin': '*',
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify({repo: repo})
|
||||
})
|
||||
.then(response => {
|
||||
if (!response.ok) {
|
||||
throw new Error('Erreur lors de la suppression du dépôt');
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('Error:', error);
|
||||
});
|
||||
}
|
||||
|
||||
// Appeler la fonction pour charger les dépôts surveillés au chargement de la page
|
||||
refreshWatchedRepos();
|
||||
Reference in New Issue
Block a user