1
0

ModSecret.vb 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291
  1. '由于包含加解密等安全信息,本文件中的部分代码已被删除
  2. Friend Module ModSecret
  3. '标注 PCL 的不同分支,仅用于替换标记
  4. Public Const VersionBranchMain As String = "Red"
  5. '在开源版的注册表与常规版的注册表隔离,以防数据冲突
  6. Public Const RegFolder As String = "PCLRed"
  7. '用于微软登录的 ClientId
  8. Public OAuthClientId As String = If(Environment.GetEnvironmentVariable("PCL_MS_CLIENT_ID"), "fe72edc2-3a6f-4280-90e8-e2beb64ce7e1")
  9. 'CurseForge API Key
  10. Public CurseForgeAPIKey As String = ReadBuildCredential("CurseForgeAPIKey", "PCL_CURSEFORGE_API_KEY")
  11. Private Function ReadBuildCredential(Key As String, EnvironmentKey As String) As String
  12. Dim Override = Environment.GetEnvironmentVariable(EnvironmentKey)
  13. If Override IsNot Nothing Then Return Override
  14. Using Resource = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("PCL.RedBuildCredentials.json")
  15. If Resource Is Nothing Then Return ""
  16. Using Reader As New StreamReader(Resource, Encoding.UTF8)
  17. Return If(JObject.Parse(Reader.ReadToEnd())(Key)?.ToString(), "")
  18. End Using
  19. End Using
  20. End Function
  21. '用于匿名数据收集的腾讯云日志服务上报 URL,形如 https://{region}.cls.tencentcs.com/track?topic_id={topic_id}
  22. Public Const ClsBaseUrl As String = ""
  23. #Region "网络鉴权"
  24. Public Const RestrictMcDownload As Boolean = False
  25. Friend Function SecretCdnSign(UrlWithMark As String) As String
  26. If Not UrlWithMark.EndsWithF("{CDN}") Then Return UrlWithMark
  27. Return UrlWithMark.Replace("{CDN}", "").Replace(" ", "%20")
  28. End Function
  29. ''' <summary>
  30. ''' 设置 Headers 的 UA、Referer。
  31. ''' </summary>
  32. Friend Sub SecretHeadersSign(Url As String, ByRef Req As HttpRequestMessage, Optional SimulateBrowserHeaders As Boolean = False)
  33. If Not Req.Headers.UserAgent.Any Then
  34. If Url.Contains("baidupcs.com") OrElse Url.Contains("baidu.com") Then
  35. Req.Headers.Add("User-Agent", "LogStatistic") '#4951
  36. ElseIf SimulateBrowserHeaders Then
  37. Req.Headers.Add("User-Agent", $"PCL2/{VersionBaseName}.{CInt(BuildType)} Mozilla/5.0 AppleWebKit/537.36 Chrome/63.0.3239.132 Safari/537.36")
  38. Else
  39. Req.Headers.Add("User-Agent", $"PCL2/{VersionBaseName}.{CInt(BuildType)}")
  40. End If
  41. End If
  42. If Not SimulateBrowserHeaders Then Req.Headers.Add("Referer", $"http://{VersionCode}.open.pcl2.server/")
  43. If Url.Contains("api.curseforge.com") OrElse Url.Contains("forgecdn.net") Then Req.Headers.Add("x-api-key", CurseForgeAPIKey)
  44. End Sub
  45. #End Region
  46. #Region "主题"
  47. Public Color1 As New MyColor(52, 61, 74)
  48. Public Color2 As New MyColor(11, 91, 203)
  49. Public Color3 As New MyColor(19, 112, 243)
  50. Public Color4 As New MyColor(72, 144, 245)
  51. Public Color5 As New MyColor(150, 192, 249)
  52. Public Color6 As New MyColor(213, 230, 253)
  53. Public Color7 As New MyColor(222, 236, 253)
  54. Public Color8 As New MyColor(234, 242, 254)
  55. Public ColorBg0 As New MyColor(150, 192, 249)
  56. Public ColorBg1 As New MyColor(190, Color7)
  57. Public ColorGray1 As New MyColor(64, 64, 64)
  58. Public ColorGray2 As New MyColor(115, 115, 115)
  59. Public ColorGray3 As New MyColor(140, 140, 140)
  60. Public ColorGray4 As New MyColor(166, 166, 166)
  61. Public ColorGray5 As New MyColor(204, 204, 204)
  62. Public ColorGray6 As New MyColor(235, 235, 235)
  63. Public ColorGray7 As New MyColor(240, 240, 240)
  64. Public ColorGray8 As New MyColor(245, 245, 245)
  65. Public ColorSemiTransparent As New MyColor(1, Color8)
  66. Public ThemeNow As Integer = -1
  67. Public ColorHue As Integer = 210, ColorSat As Integer = 85, ColorLightAdjust As Integer = 0, ColorHueTopbarDelta As OneOf(Of Integer, Integer()) = 0
  68. Public ThemeDontClick As Integer = 0
  69. Private ReadOnly LuckyThemeHue As Integer = RandomInteger(0, 359)
  70. Public Sub ThemeRefresh(Optional NewTheme As Integer = -1)
  71. Try
  72. If NewTheme >= 0 AndAlso Not ThemeCheckOne(NewTheme) Then NewTheme = DefaultTheme
  73. If ThemeNow = NewTheme AndAlso NewTheme >= 0 Then Return
  74. If NewTheme >= 0 Then ThemeNow = NewTheme
  75. If Not ThemeCheckOne(ThemeNow) Then ThemeNow = DefaultTheme
  76. ColorHue = 210
  77. ColorSat = 85
  78. ColorLightAdjust = 0
  79. ColorHueTopbarDelta = 0
  80. Select Case ThemeNow
  81. Case 1 '甜柠青
  82. ColorHue = 170 : ColorSat = 75 : ColorLightAdjust = -5
  83. Case 2 '小草绿
  84. ColorHue = 125 : ColorSat = 70 : ColorLightAdjust = -6
  85. Case 3 '菠萝黄
  86. ColorHue = 50 : ColorSat = 90 : ColorLightAdjust = -7
  87. Case 4 '橡木棕
  88. ColorHue = 28 : ColorSat = 55 : ColorLightAdjust = -9
  89. Case 5 '玄素黑
  90. ColorSat = 5 : ColorLightAdjust = -12
  91. Case 6 '铁杆粉
  92. ColorHue = 335 : ColorSat = 75
  93. Case 7 '神秘紫
  94. ColorHue = 270 : ColorSat = 65
  95. Case 8 '秋仪金
  96. ColorHue = 42 : ColorLightAdjust = -8 : ColorHueTopbarDelta = 15
  97. Case 9 '活跃橙
  98. ColorHue = 25 : ColorSat = 95
  99. Case 10 '跳票红
  100. ColorHue = 355 : ColorSat = 80
  101. Case 11 '极客蓝
  102. ColorHue = 220 : ColorLightAdjust = -14
  103. Case 12 '滑稽彩:随时间平滑改变色相
  104. ColorHue = CInt((Date.UtcNow.Ticks \ TimeSpan.TicksPerMillisecond \ 50) Mod 360)
  105. ColorSat = 75 : ColorHueTopbarDelta = 35
  106. Case 13 '欧皇彩:每次启动随机配色
  107. ColorHue = LuckyThemeHue : ColorSat = 75 : ColorHueTopbarDelta = 120
  108. Case 14 '自定义
  109. ColorHue = Settings.Get(Of Integer)("UiLauncherHue")
  110. ColorSat = Settings.Get(Of Integer)("UiLauncherSat")
  111. ColorLightAdjust = Settings.Get(Of Integer)("UiLauncherLight") - 20
  112. ColorHueTopbarDelta = Settings.Get(Of Integer)("UiLauncherDelta")
  113. Case 15 '苏维埃红
  114. ColorHue = 0 : ColorSat = 90 : ColorLightAdjust = -6 : ColorHueTopbarDelta = 7
  115. Case 42 '纪念彩
  116. ColorHue = 285 : ColorSat = 80 : ColorHueTopbarDelta = 120
  117. End Select
  118. Color1 = New MyColor().FromHSL2(ColorHue, ColorSat * 0.2, 25 + ColorLightAdjust * 0.3)
  119. Color2 = New MyColor().FromHSL2(ColorHue, ColorSat, 45 + ColorLightAdjust)
  120. Color3 = New MyColor().FromHSL2(ColorHue, ColorSat, 55 + ColorLightAdjust)
  121. Color4 = New MyColor().FromHSL2(ColorHue, ColorSat, 65 + ColorLightAdjust)
  122. Color5 = New MyColor().FromHSL2(ColorHue, ColorSat, 80 + ColorLightAdjust * 0.4)
  123. Color6 = New MyColor().FromHSL2(ColorHue, ColorSat, 91 + ColorLightAdjust * 0.1)
  124. Color7 = New MyColor().FromHSL2(ColorHue, ColorSat, 95)
  125. Color8 = New MyColor().FromHSL2(ColorHue, ColorSat, 97)
  126. ColorBg0 = Color4 * 0.4 + Color5 * 0.4 + ColorGray4 * 0.2
  127. ColorBg1 = New MyColor(190, Color7)
  128. ColorSemiTransparent = New MyColor(1, Color8)
  129. Application.Current.Resources("ColorBrush1") = New SolidColorBrush(Color1)
  130. Application.Current.Resources("ColorBrush2") = New SolidColorBrush(Color2)
  131. Application.Current.Resources("ColorBrush3") = New SolidColorBrush(Color3)
  132. Application.Current.Resources("ColorBrush4") = New SolidColorBrush(Color4)
  133. Application.Current.Resources("ColorBrush5") = New SolidColorBrush(Color5)
  134. Application.Current.Resources("ColorBrush6") = New SolidColorBrush(Color6)
  135. Application.Current.Resources("ColorBrush7") = New SolidColorBrush(Color7)
  136. Application.Current.Resources("ColorBrush8") = New SolidColorBrush(Color8)
  137. Application.Current.Resources("ColorBrushBg0") = New SolidColorBrush(ColorBg0)
  138. Application.Current.Resources("ColorBrushBg1") = New SolidColorBrush(ColorBg1)
  139. Application.Current.Resources("ColorObject1") = CType(Color1, Color)
  140. Application.Current.Resources("ColorObject2") = CType(Color2, Color)
  141. Application.Current.Resources("ColorObject3") = CType(Color3, Color)
  142. Application.Current.Resources("ColorObject4") = CType(Color4, Color)
  143. Application.Current.Resources("ColorObject5") = CType(Color5, Color)
  144. Application.Current.Resources("ColorObject6") = CType(Color6, Color)
  145. Application.Current.Resources("ColorObject7") = CType(Color7, Color)
  146. Application.Current.Resources("ColorObject8") = CType(Color8, Color)
  147. Application.Current.Resources("ColorObjectBg0") = CType(ColorBg0, Color)
  148. Application.Current.Resources("ColorObjectBg1") = CType(ColorBg1, Color)
  149. ThemeRefreshMain()
  150. Catch ex As Exception
  151. Logger.Error(ex, "刷新主题颜色失败", LogBehavior.Toast)
  152. End Try
  153. End Sub
  154. Public Sub ThemeRefreshMain()
  155. RunInUi(
  156. Sub()
  157. If FrmMain Is Nothing OrElse Not FrmMain.IsLoaded Then Return
  158. '顶部条背景
  159. Dim Brush = New LinearGradientBrush With {.EndPoint = New Point(1, 0), .StartPoint = New Point(0, 0)}
  160. Dim Deltas = ColorHueTopbarDelta.Switch(Function(d) New Integer() {-d, 0, d}, Function(d) d)
  161. Brush.GradientStops.Add(New GradientStop With {.Offset = 0, .Color = New MyColor().FromHSL2(ColorHue + Deltas(0), ColorSat, 48 + ColorLightAdjust)})
  162. Brush.GradientStops.Add(New GradientStop With {.Offset = 0.5, .Color = New MyColor().FromHSL2(ColorHue + Deltas(1), ColorSat, 54 + ColorLightAdjust)})
  163. Brush.GradientStops.Add(New GradientStop With {.Offset = 1, .Color = New MyColor().FromHSL2(ColorHue + Deltas(2), ColorSat, 48 + ColorLightAdjust)})
  164. If ThemeNow = 5 Then
  165. Brush.GradientStops.Clear()
  166. Brush.GradientStops.Add(New GradientStop(New MyColor().FromHSL2(ColorHue, ColorSat, 25), 0))
  167. Brush.GradientStops.Add(New GradientStop(New MyColor().FromHSL2(ColorHue, ColorSat, 15), 0.5))
  168. Brush.GradientStops.Add(New GradientStop(New MyColor().FromHSL2(ColorHue, ColorSat, 25), 1))
  169. ElseIf ThemeNow = DefaultTheme Then
  170. Brush.GradientStops.Clear()
  171. Brush.GradientStops.Add(New GradientStop(Color.FromRgb(142, 12, 24), 0))
  172. Brush.GradientStops.Add(New GradientStop(Color.FromRgb(198, 23, 38), 0.55))
  173. Brush.GradientStops.Add(New GradientStop(Color.FromRgb(163, 13, 26), 1))
  174. End If
  175. FrmMain.PanTitle.Background = Brush
  176. FrmMain.PanTitle.Background.Freeze()
  177. FrmMain.ImgTitle.Source = If(ThemeNow >= 5 AndAlso ThemeNow <> 14 AndAlso ThemeNow <> DefaultTheme, $"{PathImage}Themes/{ThemeNow}.png", Nothing)
  178. FrmMain.ImgTitle.Opacity = If(ThemeNow = 13, 0.25, 0.5)
  179. FrmMain.CommunismEmblem.Visibility = If(ThemeNow = DefaultTheme, Visibility.Visible, Visibility.Collapsed)
  180. FrmMain.CommunismRule.Visibility = FrmMain.CommunismEmblem.Visibility
  181. FrmMain.CommunismBackdrop.Visibility = FrmMain.CommunismEmblem.Visibility
  182. If FrmLaunchRight IsNot Nothing Then FrmLaunchRight.CommunismWelcome.Visibility = FrmMain.CommunismEmblem.Visibility
  183. '主页面背景
  184. If Settings.Get(Of Boolean)("UiBackgroundColorful") Then
  185. Brush = New LinearGradientBrush With {.EndPoint = New Point(0.1, 1), .StartPoint = New Point(0.9, 0)}
  186. Brush.GradientStops.Add(New GradientStop With {.Offset = -0.1, .Color = New MyColor().FromHSL2(ColorHue - 15, ColorSat * 0.8, 91)})
  187. Brush.GradientStops.Add(New GradientStop With {.Offset = 0.4, .Color = New MyColor().FromHSL2(ColorHue, ColorSat * 0.8, 91)})
  188. Brush.GradientStops.Add(New GradientStop With {.Offset = 1.1, .Color = New MyColor().FromHSL2(ColorHue + 15, ColorSat * 0.8, 91)})
  189. If ThemeNow = DefaultTheme Then
  190. Brush.GradientStops.Clear()
  191. Brush.GradientStops.Add(New GradientStop(Color.FromRgb(255, 249, 239), 0))
  192. Brush.GradientStops.Add(New GradientStop(Color.FromRgb(247, 230, 219), 1))
  193. End If
  194. FrmMain.PanForm.Background = Brush
  195. Else
  196. FrmMain.PanForm.Background = New MyColor(245, 245, 245)
  197. End If
  198. FrmMain.PanForm.Background.Freeze()
  199. End Sub)
  200. End Sub
  201. Friend Sub ThemeCheckAll(EffectSetup As Boolean)
  202. RunInUi(
  203. Sub()
  204. If Not ThemeCheckOne(Settings.Get(Of Integer)("UiLauncherTheme")) Then Settings.Set("UiLauncherTheme", DefaultTheme)
  205. Const AllThemes As String = "0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|42"
  206. If Settings.Get(Of String)("UiLauncherThemeHide2") <> AllThemes Then Settings.Set("UiLauncherThemeHide2", AllThemes)
  207. If Not EffectSetup OrElse FrmSetupUI Is Nothing Then Return
  208. For Each Control As UIElement In FrmSetupUI.PanLauncherTheme.Children
  209. If Not TypeOf Control Is MyRadioBox OrElse Control Is FrmSetupUI.RadioLauncherTheme5Gray Then Continue For
  210. Dim Radio = DirectCast(Control, MyRadioBox)
  211. Radio.IsEnabled = True
  212. Radio.Opacity = 1
  213. Radio.ToolTip = "所有主题均已开放"
  214. Next
  215. FrmSetupUI.RadioLauncherTheme5Gray.Visibility = Visibility.Collapsed
  216. FrmSetupUI.LabLauncherTheme5Unlock.Visibility = Visibility.Collapsed
  217. FrmSetupUI.LabLauncherTheme8Copy.Visibility = Visibility.Collapsed
  218. FrmSetupUI.LabLauncherTheme9Copy.Visibility = Visibility.Collapsed
  219. FrmSetupUI.LabLauncherTheme11Click.Visibility = Visibility.Collapsed
  220. FrmSetupUI.PanLauncherHide.Visibility = Visibility.Collapsed
  221. End Sub)
  222. End Sub
  223. Friend Function ThemeCheckOne(Id As Integer) As Boolean
  224. Return (Id >= 0 AndAlso Id <= DefaultTheme) OrElse Id = 42
  225. End Function
  226. Friend Function ThemeUnlock(Id As Integer, Optional ShowDoubleHint As Boolean = True, Optional UnlockHint As String = Nothing) As Boolean
  227. Return False
  228. End Function
  229. #End Region
  230. #Region "更新"
  231. Friend Sub UpdateCheckByButton()
  232. Hint("PCL Communist 已移除启动器远程更新和配置下发")
  233. End Sub
  234. Friend IsUpdateWaitingRestart As Boolean = False
  235. Public Sub UpdateRestart(TriggerRestartAndByEnd As Boolean)
  236. End Sub
  237. Public Sub UpdateReplace(ProcessId As Integer, OldFileName As String, NewFileName As String, TriggerRestart As Boolean)
  238. End Sub
  239. ''' <summary>
  240. ''' 确保 PathTemp/Latest.exe 是最新正式版的 PCL,它会被用于整合包打包。
  241. ''' 如果不是,则下载一个。
  242. ''' </summary>
  243. Friend Sub DownloadLatestPCL(Optional LoaderToSyncProgress As LoaderBase = Nothing)
  244. '整合包携带当前本地版本,不向远程服务器请求或替换程序。
  245. FileUtils.Copy(PathExe, PathTemp & "Latest.exe")
  246. End Sub
  247. #End Region
  248. #Region "赞助等级"
  249. Public ReadOnly Property CurrentRank As DonationRank
  250. Get
  251. Return DonationRank.None
  252. End Get
  253. End Property
  254. Public Sub InputPotatoCode(IsUpdating As Boolean)
  255. End Sub
  256. Friend Sub GeneratePotatoCode()
  257. End Sub
  258. ''' <summary>
  259. ''' 获取设备识别码。
  260. ''' </summary>
  261. Friend Function GetIdentify() As String
  262. Return "0000-0000-0000-0000"
  263. End Function
  264. #End Region
  265. End Module