Converters/PermissionJsonConverter.cs

A System.Text.Json converter that reads a comma-separated permission string and maps each token to a List<TokenPermission> enum values for LichessNET token scopes. It implements Read to parse the input string and build the list; Write is unimplemented.

Obfuscated Code
#nullable enable annotations

using System.Text.Json;
using System.Text.Json.Serialization;
using LichessNET.Entities.Enumerations;

namespace LichessNET.Converters;

public class PermissionJsonConverter : JsonConverter<List<TokenPermission>>
{
    public override List<TokenPermission>? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
    {

        var permissions = reader.GetString();
        string[] permissionsList = permissions.Split(',');
        List<TokenPermission> tokenPermissions = new List<TokenPermission>();

        foreach (string permission in permissionsList)
        {
            switch (permission)
            {
                case "email:read":
                    tokenPermissions.Add(TokenPermission.ReadEmail);
                    break;
                case "preference:read":
                    tokenPermissions.Add(TokenPermission.ReadPreferences);
                    break;
                case "preference:write":
                    tokenPermissions.Add(TokenPermission.WritePreferences);
                    break;
                case "follow:read":
                    tokenPermissions.Add(TokenPermission.ReadFollows);
                    break;
                case "follow:write":
                    tokenPermissions.Add(TokenPermission.WriteFollows);
                    break;
                case "msg:write":
                    tokenPermissions.Add(TokenPermission.WriteMessages);
                    break;
                case "challenge:read":
                    tokenPermissions.Add(TokenPermission.ReadChallenges);
                    break;
                case "challenge:write":
                    tokenPermissions.Add(TokenPermission.WriteChallenges);
                    break;
                case "challenge:bulk":
                    tokenPermissions.Add(TokenPermission.BulkChallenges);
                    break;
                case "tournament:write":
                    tokenPermissions.Add(TokenPermission.WriteTournaments);
                    break;
                case "team:read":
                    tokenPermissions.Add(TokenPermission.ReadTeams);
                    break;
                case "team:write":
                    tokenPermissions.Add(TokenPermission.WriteTeams);
                    break;
                case "team:lead":
                    tokenPermissions.Add(TokenPermission.ManageTeams);
                    break;
                case "puzzle:read":
                    tokenPermissions.Add(TokenPermission.ReadPuzzleActivity);
                    break;
                case "racer:write":
                    tokenPermissions.Add(TokenPermission.WriteRaces);
                    break;
                case "study:read":
                    tokenPermissions.Add(TokenPermission.ReadStudies);
                    break;
                case "study:write":
                    tokenPermissions.Add(TokenPermission.WriteStudies);
                    break;
                case "board:play":
                    tokenPermissions.Add(TokenPermission.PlayGames);
                    break;
                case "engine:read":
                    tokenPermissions.Add(TokenPermission.ReadEngines);
                    break;
                case "engine:write":
                    tokenPermissions.Add(TokenPermission.ManageEngines);
                    break;
            }
        }

        return tokenPermissions;
    }

    public override void Write(Utf8JsonWriter writer, List<TokenPermission> value, JsonSerializerOptions options)
    {
        throw new NotImplementedException();
    }
}