|
1 | 1 | using System.Diagnostics.CodeAnalysis; |
2 | 2 | using Bunkum.Core.Configuration; |
3 | 3 | using Microsoft.CSharp.RuntimeBinder; |
4 | | -using Refresh.Database.Models.Assets; |
5 | | -using Refresh.Database.Models.Users; |
6 | 4 |
|
7 | 5 | namespace Refresh.Core.Configuration; |
8 | 6 |
|
9 | 7 | [SuppressMessage("ReSharper", "AutoPropertyCanBeMadeGetOnly.Global")] |
10 | 8 | [SuppressMessage("ReSharper", "RedundantDefaultMemberInitializer")] |
11 | 9 | public class GameServerConfig : Config |
12 | 10 | { |
13 | | - public override int CurrentConfigVersion => 26; |
| 11 | + public override int CurrentConfigVersion => 27; |
14 | 12 | public override int Version { get; set; } = 0; |
15 | 13 |
|
16 | 14 | protected override void Migrate(int oldVer, dynamic oldConfig) |
17 | 15 | { |
18 | | - if (oldVer < 18) |
| 16 | + // In version 27, various (mostly already role-specific) perms, like blocked assets and read-only mode, were moved to dedicated child objects, |
| 17 | + // to more cleanly split the perms between certain roles, and to make their enforcement easier. |
| 18 | + if (oldVer < 27) |
19 | 19 | { |
20 | | - // Asset safety level was added in config version 2, so dont try to migrate if we are coming from an older version than that |
21 | | - if (oldVer >= 2) |
| 20 | + this.NormalUserPermissions = new(); |
| 21 | + this.TrustedUserPermissions = new(); |
| 22 | + |
| 23 | + // filesize quota limit was added during version 11, but the version wasn't bumped, so catch error to be safe |
| 24 | + if (oldVer >= 11) |
22 | 25 | { |
23 | | - int oldSafetyLevel = (int)oldConfig.MaximumAssetSafetyLevel; |
24 | | - this.BlockedAssetFlags = new ConfigAssetFlags |
| 26 | + try |
| 27 | + { |
| 28 | + this.NormalUserPermissions.UserFilesizeQuota = (int)oldConfig.UserFilesizeQuota; |
| 29 | + this.TrustedUserPermissions.UserFilesizeQuota = (int)oldConfig.UserFilesizeQuota; |
| 30 | + } |
| 31 | + catch (RuntimeBinderException) |
25 | 32 | { |
26 | | - Dangerous = oldSafetyLevel < 3, |
27 | | - Modded = oldSafetyLevel < 2, |
28 | | - Media = oldSafetyLevel < 1, |
29 | | - }; |
| 33 | + // do nothing |
| 34 | + } |
30 | 35 | } |
31 | 36 |
|
32 | | - // Asset safety level for trusted users was added in config version 12, so dont try to migrate if we are coming from a version older than that |
33 | | - if (oldVer >= 12) |
| 37 | + if (oldVer >= 18) |
34 | 38 | { |
35 | | - // There was no version bump for trusted users being added, so we just have to catch this error :/ |
36 | | - try |
| 39 | + this.NormalUserPermissions.BlockedAssetFlags.Dangerous = (bool)oldConfig.BlockedAssetFlags.Dangerous; |
| 40 | + this.NormalUserPermissions.BlockedAssetFlags.Media = (bool)oldConfig.BlockedAssetFlags.Media; |
| 41 | + this.NormalUserPermissions.BlockedAssetFlags.Modded = (bool)oldConfig.BlockedAssetFlags.Modded; |
| 42 | + |
| 43 | + this.TrustedUserPermissions.BlockedAssetFlags.Dangerous = (bool)oldConfig.BlockedAssetFlagsForTrustedUsers.Dangerous; |
| 44 | + this.TrustedUserPermissions.BlockedAssetFlags.Media = (bool)oldConfig.BlockedAssetFlagsForTrustedUsers.Media; |
| 45 | + this.TrustedUserPermissions.BlockedAssetFlags.Modded = (bool)oldConfig.BlockedAssetFlagsForTrustedUsers.Modded; |
| 46 | + } |
| 47 | + else |
| 48 | + { |
| 49 | + // Asset safety level was added in config version 2, so dont try to migrate if we are coming from an older version than that |
| 50 | + if (oldVer >= 2) |
37 | 51 | { |
38 | | - int oldTrustedSafetyLevel = (int)oldConfig.MaximumAssetSafetyLevelForTrustedUsers; |
39 | | - this.BlockedAssetFlagsForTrustedUsers = new ConfigAssetFlags |
| 52 | + int oldSafetyLevel = (int)oldConfig.MaximumAssetSafetyLevel; |
| 53 | + this.NormalUserPermissions.BlockedAssetFlags = new ConfigAssetFlags |
40 | 54 | { |
41 | | - Dangerous = oldTrustedSafetyLevel < 3, |
42 | | - Modded = oldTrustedSafetyLevel < 2, |
43 | | - Media = oldTrustedSafetyLevel < 1, |
| 55 | + Dangerous = oldSafetyLevel < 3, |
| 56 | + Modded = oldSafetyLevel < 2, |
| 57 | + Media = oldSafetyLevel < 1, |
44 | 58 | }; |
45 | 59 | } |
46 | | - catch (RuntimeBinderException) |
| 60 | + |
| 61 | + // Asset safety level for trusted users was added in config version 12, so dont try to migrate if we are coming from a version older than that |
| 62 | + if (oldVer >= 12) |
47 | 63 | { |
48 | | - this.BlockedAssetFlagsForTrustedUsers = this.BlockedAssetFlags; |
| 64 | + // There was no version bump for trusted users being added, so we just have to catch this error :/ |
| 65 | + try |
| 66 | + { |
| 67 | + int oldTrustedSafetyLevel = (int)oldConfig.MaximumAssetSafetyLevelForTrustedUsers; |
| 68 | + this.TrustedUserPermissions.BlockedAssetFlags = new ConfigAssetFlags |
| 69 | + { |
| 70 | + Dangerous = oldTrustedSafetyLevel < 3, |
| 71 | + Modded = oldTrustedSafetyLevel < 2, |
| 72 | + Media = oldTrustedSafetyLevel < 1, |
| 73 | + }; |
| 74 | + } |
| 75 | + catch (RuntimeBinderException) |
| 76 | + { |
| 77 | + this.TrustedUserPermissions.BlockedAssetFlags = this.NormalUserPermissions.BlockedAssetFlags; |
| 78 | + } |
49 | 79 | } |
50 | 80 | } |
| 81 | + |
| 82 | + // Timed level upload limits were added in version 19. |
| 83 | + if (oldVer >= 19) |
| 84 | + { |
| 85 | + this.NormalUserPermissions.TimedLevelUploadLimits.Enabled = (bool)oldConfig.TimedLevelUploadLimits.Enabled; |
| 86 | + this.NormalUserPermissions.TimedLevelUploadLimits.TimeSpanHours = (int)oldConfig.TimedLevelUploadLimits.TimeSpanHours; |
| 87 | + this.NormalUserPermissions.TimedLevelUploadLimits.LevelQuota = (int)oldConfig.TimedLevelUploadLimits.LevelQuota; |
| 88 | + |
| 89 | + this.TrustedUserPermissions.TimedLevelUploadLimits.Enabled = (bool)oldConfig.TimedLevelUploadLimits.Enabled; |
| 90 | + this.TrustedUserPermissions.TimedLevelUploadLimits.TimeSpanHours = (int)oldConfig.TimedLevelUploadLimits.TimeSpanHours; |
| 91 | + this.TrustedUserPermissions.TimedLevelUploadLimits.LevelQuota = (int)oldConfig.TimedLevelUploadLimits.LevelQuota; |
| 92 | + } |
| 93 | + |
| 94 | + // Read-only mode was added for both normal and trusted users in version 20. |
| 95 | + if (oldVer >= 20) |
| 96 | + { |
| 97 | + this.NormalUserPermissions.ReadOnlyMode = (bool)oldConfig.ReadOnlyMode; |
| 98 | + this.TrustedUserPermissions.ReadOnlyMode = (bool)oldConfig.ReadonlyModeForTrustedUsers; |
| 99 | + } |
51 | 100 | } |
52 | 101 | } |
53 | 102 |
|
54 | 103 | public string LicenseText { get; set; } = "Welcome to Refresh!"; |
55 | 104 |
|
56 | | - public ConfigAssetFlags BlockedAssetFlags { get; set; } = new(AssetFlags.Dangerous | AssetFlags.Modded); |
57 | | - /// <seealso cref="GameUserRole.Trusted"/> |
58 | | - public ConfigAssetFlags BlockedAssetFlagsForTrustedUsers { get; set; } = new(AssetFlags.Dangerous | AssetFlags.Modded); |
| 105 | + /// <summary> |
| 106 | + /// Role-specific permissions for normal users and below |
| 107 | + /// </summary> |
| 108 | + public RolePermissions NormalUserPermissions = new(); |
| 109 | + /// <summary> |
| 110 | + /// Role-specific permissions for trusted users and above |
| 111 | + /// </summary> |
| 112 | + public RolePermissions TrustedUserPermissions = new(); |
| 113 | + |
59 | 114 | public bool AllowUsersToUseIpAuthentication { get; set; } = false; |
60 | 115 | public bool PermitPsnLogin { get; set; } = true; |
61 | 116 | public bool PermitRpcnLogin { get; set; } = true; |
@@ -97,20 +152,6 @@ protected override void Migrate(int oldVer, dynamic oldConfig) |
97 | 152 | /// </summary> |
98 | 153 | public string GameConfigStorageUrl { get; set; } = "https://refresh.example.com/lbp"; |
99 | 154 | public bool AllowInvalidTextureGuids { get; set; } = false; |
100 | | - public bool ReadOnlyMode { get; set; } = false; |
101 | | - /// <seealso cref="GameUserRole.Trusted"/> |
102 | | - public bool ReadonlyModeForTrustedUsers { get; set; } = false; |
103 | | - /// <summary> |
104 | | - /// The amount of data the user is allowed to upload before all resource uploads get blocked, defaults to 100mb. |
105 | | - /// </summary> |
106 | | - public int UserFilesizeQuota { get; set; } = 100 * 1_048_576; |
107 | | - |
108 | | - public TimedLevelUploadLimitProperties TimedLevelUploadLimits { get; set; } = new() |
109 | | - { |
110 | | - Enabled = false, |
111 | | - TimeSpanHours = 24, |
112 | | - LevelQuota = 10, |
113 | | - }; |
114 | 155 |
|
115 | 156 | /// <summary> |
116 | 157 | /// Whether to print the room state whenever a `FindBestRoom` match returns no results |
|
0 commit comments