This is an automated email from the git hooks/post-receive script. New commit to branch bow-v2 in repository bow. See https://gitlab.nuiton.org/chorem/bow.git commit 7b2f9e3fe4658d53caff71248273c41429ea3ffa Author: Benjamin <poussin@codelutin.com> Date: Sun Aug 4 09:41:00 2019 +0200 ajout dans le TODO en vrac remise en place des emails utilisateurs --- TODO.md | 87 ++++++++++++++++++++-- conf/application.conf | 7 +- src/main/java/com/chorem/bow/model/BowUser.java | 3 + .../resources/db/migration/V1__init_schema.sql | 4 + 4 files changed, 95 insertions(+), 6 deletions(-) diff --git a/TODO.md b/TODO.md index 6e9003c..a2672c0 100644 --- a/TODO.md +++ b/TODO.md @@ -2,15 +2,13 @@ mettre dans le token JWT le user, pour ne plus a avoir a accéder à la base pou chaque demande qu'il fait pour la récupération du user. -Database -======== +## Database - il faut que bowUser.emails soit unique sur tous les utilisateurs - il faut que bookmark.publicAlias soit unique sur tous les utilisateurs -Feature -======= +## Feature Ajouter un date de validité au token (surtout utile pour les pseudo user) @@ -50,4 +48,83 @@ Group: - Enum memberDefaultVisiblity (ALL, MEMBER, ADMIN) - Set<BowUser> restrictiveVisibility (la liste des membres qui veulent que seul l'admin puisse les voir dans la liste des membres) -bookmarks.cl/group/MonGroup \ No newline at end of file +bookmarks.cl/group/MonGroup + +## En vrac + +### Tech +- single page +- back java (go?) (-> java) +- front html/js/css +- graphQL ou Rest ? (-> Rest) +- postgresl (embeded, mais configurable si souhait d'utiliser un postgresql externe) + +bow.cl/a/<alias> +bow.cl/avatar/<email> +bow.cl/rss/<uuid> (uuid d'une requete enregistrée) +bow.cl/openid +bow.cl/oauth +bow.cl/bookmarks/ + +### Fonctionnalité +- utilisation en tant que moteur de recherche dans les navigateurs +- interprétation de commandes programmables dans l'url (sauvegarde, recherche (tag, fulltext), redirection vers une url) +- enregistrement de bookmark (description + tag) +- sauvegarde d'une miniature de la page +- possibilité d'avoir un alias privé et/ou public (alias.cl) +- possibilité de généré un mot de passe unique pour un domain basé sur un master password (scriptlet, script shell) +- possibilité de partager avec d'autre (partage group privé, partage group public) +- génération flux RSS en fonction d'une recherche (par tag ou fulltext) +- comptabilise le nombre d'utilisation de chaque bookmark (click, alias, ...) +- possilité de créer des forms de login pour chaque bookmark (permet enregistrer par exemple le login) +- Bow est provider d'identité: openId, OAuth +- compatible OpenSearch +- import (Firefox) +- export + +### Idée +- bow doit garder l'historique des recherches +- lors des propositions proposer avec les url enregistrées dans Bow et de l'historique de recherche +- Bow doit permettre de faire server de sauvegarde de bookmark/password mozilla-sync +- mettre un interpreteur plus complexe des demandes passées dans l'url (un peu à la chatbot). +- sauvegarde du html de la page pour lecture même si le site disparait +- check régulier si le site existe encore +- check régulier si le contenu de la page à changé (génération d'un flux rss des pages modifiers)(l'utilisateur à la possibilité de choisir la fréquence, on bride la fréquence max pour les utilisateurs non payant: ex: pas plus de 3 bookmarks avec vérif journaliere; 5 avec verif hebdo, 20 avec verif mensuel, 100 avec verif annuel (fixé par config))(pour les payants conservation de chaque version) +- permettre d'avoir en critère de recherche les bookmarks avec auth, surveillé (avec contenu modifier il y a moins de N jours). L'utilisateur peut indiquer un chemin xpath (css path?) pour dire quelle partie l'interesse vraiment +- permettre d'avoir un critère de recherche dans les groups (bookmark ne m'appartenant pas mais que je peux voir) +- Si on va a un site via un alias et qu'il exist une form de login dans le bookmark, alors on est d'abord redirigé vers cette form et non pas vers le site +- permettre de partager un bookmark ou un resultat de recherche via: email, generation pdf, generation page web static, (tweeter, google+, facebook, ...) ? +- Permettre de faire une action sur tous les resultats d'une recherche: supprimer, ajouter un tag, exporter, .... Par exemple si on souhaite permettre a des personnes non inscrite de suivre notre veille. On crée un user 'shared'. On recherche tous les liens ajouté la semaine dernière, et on ajoute le tag '#shared' à tous les bookmarks de cette recherche et on demande l'url qui permette de rejouer cette recherche pour notre utilisateur shared +* Les bookmarklets peuvent etre utiliser sans le token permanent. Mais avec un cookie d'authentification. Ce cookie contient le WikittyToken courant. Ce cookie devient invalide si la personne clique sur ce déconnecté. Tant qu'elle ne la pas fait, le token est est valide et on authentifie l'utilisateur grace a lui. (a mettre en place en plus des tokenPermanent/tokenSession. +* email forwarder (permet d'avoir une adresse mail unique par site, on sait d'ou vient le spam :)): Pour chaque bookmark des emails sont créés de la form <user name>-<site domain>@bow.cl, qui redirige vers le vrai email de la personne en lui ajoutant +bow-<domain site>. Chaque utilisateur à la possibilité de créer de nouveau login comme il le veut en plus de ceux déjà créé (non supprimable). Chaque bookmark à donc une liste d'email de redirection +* Pour chaque login créé l'utilisateur peux lui ajouter une image (avatar) qui sera utilisée lorsque des sites tiers demandent l'avatar via (open avatar/pavatar/ il y a une norme d'avatar décentralisé) +* Ajouter une fonctionnalité pour qu'un utilisateur puisse supprimer son compte et tous ces bookmarks (double/triple verif avec email de confirmation et tout et tout) +* Stat: faire des statistiques sur quel navigateur on utilise le plus pour stocker des urls ou recherche des urls :), depuis quel lieu (ip), ... +* Faire un script qui permette de facilement genere une form HTML avec login/password que l'on voit dans bow mais qui une fois soumise nous redirige vers le vrai site (exemple: Credit Mutuel). Normalement ca devrait etre possible de mettre la forme en markdown et de genere le mot de passe via le BowAuthentication pour ce site avec un domain forcé. +* Nouveau processus de creation de compte. On demande la creation avec comme login un email. On créé un token sur le user et on envoie par mail un lien de registration avec ce token. Le compte est validé lorsque le lien est cliqué. Dans ce cas le token de registration est supprimé et le compte est alors actif. (restraint ton les droits sur un compte non actif ?) Lorsque la personne perd son mot de passe, on remet un token dans le field registration et on lui renvoie un email. Lorsqu'il c [...] +* Bow doit être un proviser d'authent: OpenId, OAuth, ... +* permettre de s'authentifier à Bow via: OpenId, OAuth, ... +* après avoir fait une requete, permettre d'enregistrer cette requete et de la nomer. Soit on conserve le resultat actuel en plus de la requete, soit on demande a ce quelle soit rejouer a chaque fois. Permettre ensuite de partager cette requetes avec le monde entier comme pour les alias publics. De cette facon on peut partager un ensemble de lien facilement. Cela creer en plus une URL RSS specifique (avec un UUID) que le l'on peut utiliser soit meme ou donner a d'autre pour qu'ils suivre [...] +* http://www.bortzmeyer.org/6596.html peut-etre utilise le canonical plutot que l'adresse de la page pour bookmarker ? mais pas sur, c'est surtout pertinant pour les moteurs de recherche. +* afficher les tags avec: http://cssglobe.com/lab/css3_tags/01.html +* The ability to bookmark by email (on envoie un email qui contient l'url, la description et les tags et ils sont ajoute au bookmarks) (un filtre sur l'adresse expéditeur est fait via regex (permet d'avoir un seul email, une liste d'email, ou un domaine) qui autorise l'ajout +* config en fonction du navigateur de l'utilisateur, s'il souhaite de l'ajax ou non. Valeur par defaut puis par navigateur utilise pour configurer. +* Packaging: jar executable (container de servlet inclus), script rc/systemd pour linux, package debian (postgresql embeded) + +- permettre de faire un peu comme http://www.scoop.it/ + +* [done] Permettre lors de l'ajout d'un lien d'indiquer facilement que l'ajout est pour un groupe en mettant le tag "@NomDuGroup". On defini les groupe via une page d'admin en indiquant les personnes faisant parti de ce groupe. (voir comment gere la suppression de ce tag ? voir comment faire pour que plusieurs personne alimente ce groupe en lien) +* [done] pouvoir creer des groups avec qui on partage des bookmarks +* [done] avoir des flux rss a partir d'une requete/tag +* [done] mettre en place la securite, pour eviter que certain utilise l'action removeBookmark pour supprimer des user ou des bookmark qui ne leur appartient pas. +* [done] Creation de pseudo-compte pour le partage de lien. BowSharedUser[description:String #pourquoi on a créé ce user] <- WikittyUser, WikittyAuthorisation. Ces users n'ont aucun menu, aucune zone de recherche, cela permet seulement de générer une url avec un token permanent que l'on peut partagé avec des personnes non inscrite a bow mais sans rendre public nos bookmarks. On a un menu pour creer ces users. Ces users créés sont personnel au user. Pour cela le login est prefixé du wikit [...] +* [done] permettre d'ajouter en critere de recherche une periode (deux dates) ceci en permettant beaucoup plus de chose dans le champs de recherche fulltext (ajout de tag, date, datefrom, dateto, ...)(ex:java tag:@cldev tag:-@clsys datefrom:20150601 dateto:20150630) (je pense qu'il suffit de faire des rechercher/remplacer pour mettre les bon nom de champs a la place de tag, date, datefrom, dateto de faire passer la requete dans WikittyQueryParser et de la jouer. +* [done] faire un bookmarklet pour ajouter une url: + * javascript:var bowtag=prompt("tag"); if (bowtag!==null){ location.href='https://bow.chorem.org/bow/addUrl?return=true& + link='+encodeURIComponent(location.href)+'& + description='+encodeURIComponent(getSelection().toString()||document.title||'')+'& + tagLine='+encodeURIComponent(tag)} + va sur bow, permet de corriger le bookmark (ajout de tag, description, alias, password, ...) (ou alors demande lorsqu'on est encore sur la page ? avec un prompt ?) et lorsqu'on sauve retourne a la page qui vient d'être bookmarkee si return = true. +* [done] faire en sorte que Bow soit provider d'identité: openId, OAuth, ... +* [done] pouvoir selectionner du texte sur la page a bookmarque qui serve de texte de bookmark +* [done] ameliorer le script add pour pouvoir choisir le type de bookmark (private, public, groups) diff --git a/conf/application.conf b/conf/application.conf index abc1e82..e365aaa 100644 --- a/conf/application.conf +++ b/conf/application.conf @@ -7,4 +7,9 @@ db.password = xxxxxxxx # hikari hikari.autoCommit = false -hikari.maximumPoolSize = 20 \ No newline at end of file +hikari.maximumPoolSize = 20 + +# flyway +flyway.baselineOnMigrate=true +flyway.baselineVersion=0 +flyway.baselineDescription=Wikitty data diff --git a/src/main/java/com/chorem/bow/model/BowUser.java b/src/main/java/com/chorem/bow/model/BowUser.java index 57cad5f..453ef53 100644 --- a/src/main/java/com/chorem/bow/model/BowUser.java +++ b/src/main/java/com/chorem/bow/model/BowUser.java @@ -17,6 +17,9 @@ public class BowUser { String login; String password; List<Token> tokens; + LinkedHashSet<String> emails; + /* en cle l'email, en valeur une chaine random (uuid) qui permet la validation */ + Map<String, String> unconfirmedEmails; AuthenticationInfo authenticationInfo; boolean autoScreenshot; boolean autoFavicon; diff --git a/src/main/resources/db/migration/V1__init_schema.sql b/src/main/resources/db/migration/V1__init_schema.sql index a986aa9..fd38d1b 100644 --- a/src/main/resources/db/migration/V1__init_schema.sql +++ b/src/main/resources/db/migration/V1__init_schema.sql @@ -44,6 +44,8 @@ create table bowUser ( login Text, password Text, tokens jsonb, -- Token[], + emails TEXT[], + unconfirmedEmails jsonb, -- en cle l'email, en valeur l'uuid qui permet la validation authenticationInfo jsonb, -- AuthenticationInfo, autoScreenshot boolean, autoFavicon boolean, @@ -54,6 +56,8 @@ create table bowUser ( CREATE UNIQUE INDEX bowUser_login_idx ON BowUser (login); CREATE INDEX bowUser_token_idx ON BowUser USING gin (tokens); +CREATE UNIQUE INDEX bowUser_emails_idx ON BowUser (unnest(emails)); +CREATE INDEX bowUser_unconfirmedEmails_idx ON BowUser USING gin (unconfirmedEmails); create table bookmark ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.