Point d'exclamation et caractères spéciaux dans les noms d'utilisateur

Le seul problème sera si vous n’êtes pas satisfait des noms d’utilisateur que le script choisit. Donc, si cela ne vous dérange pas que quelque chose comme ceci se produise :

  • clan|nickname → clan_nickname
  • [clan]nickname → clan_nickname2

alors vous êtes probablement d’accord, et il semble assez improbable que vous ayez deux personnes dans le même clan avec le même surnom mais des caractères supplémentaires différents, donc je pense que vous serez probablement d’accord.

Malheureusement, nous avons dû créer nous-mêmes notre script de migration complet. Le script disponible à l’époque (fin 2022) n’était absolument pas dans un état “fini”. Des morceaux de code référencés manquaient et d’autres n’avaient aucun sens.

Parmi les parties que nous avons dû gérer, il y avait le renommage des noms d’utilisateur qui ne respectaient pas la norme discourse. Nous avions plus de 10 000 utilisateurs, nous avons donc simplement attribué le nom d’utilisateur au champ “nom d’utilisateur” qui n’a pas de telles restrictions et lorsqu’un nom d’utilisateur enfreignait l’une des règles, nous l’avons remplacé par la chaîne md5 du nom d’utilisateur. Ensuite, nous avons laissé aux utilisateurs 1 mois pour changer librement leur nom d’utilisateur afin qu’ils puissent le remplacer par quelque chose qui ressemble à leur nom d’origine.

Voici un extrait du code :

    public static string ParseName(string text)
    {
        var reservedName = new string[] { "user", "system", "moderators" };
        var result = NormalizeText(text);

        // If reserved change it
        if (reservedName.Contains(result, StringComparer.OrdinalIgnoreCase))
            result = text.ToLower().ToMD5();

        // Invalid alphanumeric
        else if (!Regex.IsMatch(result, @\"^[a-zA-Z0-9_.-]*$\"))
            result = text.ToLower().ToMD5();

        // Invalid repeated
        else if (Regex.IsMatch(result, @\"[-_.]{2,}\"))
            result = text.ToLower().ToMD5();

        // Invalid trailing char
        else if (Regex.IsMatch(result, @\"/[\\p{L}\\p{N}]+$\"))
            result = text.ToLower().ToMD5();

        // Confusing extensions
        else if (Regex.IsMatch(result, @\"/\\.(js|json|css|htm|html|xml|jpg|jpeg|png|gif|bmp|ico|tif|tiff|woff)$/i\"))
            result = text.ToLower().ToMD5();

        // Starting and ending dots
        else if (result.StartsWith(".") || result.EndsWith("."))
            result = text.ToLower().ToMD5();

        // No more than 60 character
        result = result.Truncate(60);

        return result;
    }

Nous avons utilisé ce fichier comme référence pour déterminer ce qui devait être considéré comme une restriction. Il a peut-être été modifié entre-temps, alors gardez un œil dessus.

2 « J'aime »

L’avez-vous basé sur un script d’importation existant ? Si c’était le cas, il aurait appelé discourse/lib/user_name_suggester.rb at main · discourse/discourse · GitHub et aurait simplement fonctionné.

Non, nous avons abandonné le script car il était incroyablement lent à traiter un forum avec plus de 10 millions de réponses.

Nous avons tout créé à partir de zéro en C#. Il a fallu environ 4 à 5 heures pour migrer tout le contenu à l’exception des avatars et créer des redirections pour correspondre aux différents formats d’URL. Une deuxième passe du script avec un paramètre spécifique mettrait également à jour l’avatar de chaque utilisateur actif au cours des 6 derniers mois et ajouterait toutes les redirections nécessaires en analysant les réponses et en recherchant l’ancien format d’URL.

Cela a pris plus ou moins quelques jours, mais c’était quelque chose qui pouvait se faire en arrière-plan, car l’important pour nous était d’avoir le forum opérationnel avec tout le contenu en moins d’une journée.

1 « J'aime »

Beau travail ! C’est très cool.

Pour information, les scripts existants ignorent le contenu existant, donc l’importation finale aurait probablement pris moins d’une heure, surtout si vous lui indiquiez la date des données les plus récemment importées. La première exécution serait cependant très pénible.

Oui, je sais qu’il a également repris, mais certains anciens contenus étaient tellement désordonnés (le forum a connu une migration au début des années 2000) que le script échouait la plupart du temps ou ralentissait très rapidement.\n\nCroyez-moi, si nous avions pu éviter 3 mois d’écriture et de tests, nous l’aurions fait ! :smiley:

2 « J'aime »