2021-04-26 20:41:26 +00:00
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
2021-04-26 21:41:04 +00:00
using System ;
using System.Security.Principal ;
2021-04-26 20:41:26 +00:00
using osu.Framework ;
using osu.Framework.Allocation ;
using osu.Framework.Graphics.Containers ;
using osu.Framework.Graphics.Sprites ;
using osu.Game.Graphics ;
using osu.Game.Overlays ;
using osu.Game.Overlays.Notifications ;
2021-04-26 21:41:04 +00:00
namespace osu.Desktop.Admin
2021-04-26 20:41:26 +00:00
{
/// <summary>
/// Checks if the game is running with elevated privileges (as admin in Windows, root in Unix) and displays a warning notification if so.
/// </summary>
public class AdminChecker : CompositeDrawable
{
[Resolved]
protected NotificationOverlay Notifications { get ; private set ; }
protected override void LoadComplete ( )
{
base . LoadComplete ( ) ;
2021-04-26 21:41:04 +00:00
if ( isAdmin ( ) )
2021-04-26 20:41:26 +00:00
Notifications . Post ( new AdminNotification ( ) ) ;
}
2021-04-26 21:41:04 +00:00
private bool isAdmin ( ) = > OperatingSystem . IsWindows ( ) ? new WindowsPrincipal ( WindowsIdentity . GetCurrent ( ) ) . IsInRole ( WindowsBuiltInRole . Administrator ) : Mono . Unix . Native . Syscall . geteuid ( ) = = 0 ;
2021-04-26 20:41:26 +00:00
private class AdminNotification : SimpleNotification
{
public override bool IsImportant = > true ;
public AdminNotification ( )
{
2021-04-26 21:41:04 +00:00
Text = $"Running osu! as {(RuntimeInfo.IsUnix ? " root " : " administrator ")} does not improve performance and poses a security risk. Please run the game normally." ;
2021-04-26 20:41:26 +00:00
}
[BackgroundDependencyLoader]
private void load ( OsuColour colours , NotificationOverlay notificationOverlay )
{
Icon = FontAwesome . Solid . ShieldAlt ;
IconBackgound . Colour = colours . YellowDark ;
Activated = delegate
{
notificationOverlay . Hide ( ) ;
return true ;
} ;
}
}
}
}