gi-gio-2.0.20: GI/Gio/Objects/Credentials.hs
{- |
Copyright : Will Thompson, Iñaki García Etxebarria and Jonas Platte
License : LGPL-2.1
Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc)
The 'GI.Gio.Objects.Credentials.Credentials' type is a reference-counted wrapper for native
credentials. This information is typically used for identifying,
authenticating and authorizing other processes.
Some operating systems supports looking up the credentials of the
remote peer of a communication endpoint - see e.g.
'GI.Gio.Objects.Socket.socketGetCredentials'.
Some operating systems supports securely sending and receiving
credentials over a Unix Domain Socket, see
'GI.Gio.Objects.UnixCredentialsMessage.UnixCredentialsMessage', 'GI.Gio.Objects.UnixConnection.unixConnectionSendCredentials' and
'GI.Gio.Objects.UnixConnection.unixConnectionReceiveCredentials' for details.
On Linux, the native credential type is a struct ucred - see the
unix(7) man page for details. This corresponds to
'GI.Gio.Enums.CredentialsTypeLinuxUcred'.
On FreeBSD, Debian GNU\/kFreeBSD, and GNU\/Hurd, the native
credential type is a struct cmsgcred. This corresponds
to 'GI.Gio.Enums.CredentialsTypeFreebsdCmsgcred'.
On NetBSD, the native credential type is a struct unpcbid.
This corresponds to 'GI.Gio.Enums.CredentialsTypeNetbsdUnpcbid'.
On OpenBSD, the native credential type is a struct sockpeercred.
This corresponds to 'GI.Gio.Enums.CredentialsTypeOpenbsdSockpeercred'.
On Solaris (including OpenSolaris and its derivatives), the native
credential type is a ucred_t. This corresponds to
'GI.Gio.Enums.CredentialsTypeSolarisUcred'.
/Since: 2.26/
-}
#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
&& !defined(__HADDOCK_VERSION__))
module GI.Gio.Objects.Credentials
(
-- * Exported types
Credentials(..) ,
IsCredentials ,
toCredentials ,
noCredentials ,
-- * Methods
-- ** getUnixPid #method:getUnixPid#
#if ENABLE_OVERLOADING
CredentialsGetUnixPidMethodInfo ,
#endif
credentialsGetUnixPid ,
-- ** getUnixUser #method:getUnixUser#
#if ENABLE_OVERLOADING
CredentialsGetUnixUserMethodInfo ,
#endif
credentialsGetUnixUser ,
-- ** isSameUser #method:isSameUser#
#if ENABLE_OVERLOADING
CredentialsIsSameUserMethodInfo ,
#endif
credentialsIsSameUser ,
-- ** new #method:new#
credentialsNew ,
-- ** setNative #method:setNative#
#if ENABLE_OVERLOADING
CredentialsSetNativeMethodInfo ,
#endif
credentialsSetNative ,
-- ** setUnixUser #method:setUnixUser#
#if ENABLE_OVERLOADING
CredentialsSetUnixUserMethodInfo ,
#endif
credentialsSetUnixUser ,
-- ** toString #method:toString#
#if ENABLE_OVERLOADING
CredentialsToStringMethodInfo ,
#endif
credentialsToString ,
) where
import Data.GI.Base.ShortPrelude
import qualified Data.GI.Base.ShortPrelude as SP
import qualified Data.GI.Base.Overloading as O
import qualified Prelude as P
import qualified Data.GI.Base.Attributes as GI.Attributes
import qualified Data.GI.Base.ManagedPtr as B.ManagedPtr
import qualified Data.GI.Base.GClosure as B.GClosure
import qualified Data.GI.Base.GError as B.GError
import qualified Data.GI.Base.GVariant as B.GVariant
import qualified Data.GI.Base.GValue as B.GValue
import qualified Data.GI.Base.GParamSpec as B.GParamSpec
import qualified Data.GI.Base.CallStack as B.CallStack
import qualified Data.GI.Base.Properties as B.Properties
import qualified Data.Text as T
import qualified Data.ByteString.Char8 as B
import qualified Data.Map as Map
import qualified Foreign.Ptr as FP
import qualified GHC.OverloadedLabels as OL
import qualified GI.GObject.Objects.Object as GObject.Object
import {-# SOURCE #-} qualified GI.Gio.Enums as Gio.Enums
-- | Memory-managed wrapper type.
newtype Credentials = Credentials (ManagedPtr Credentials)
foreign import ccall "g_credentials_get_type"
c_g_credentials_get_type :: IO GType
instance GObject Credentials where
gobjectType = c_g_credentials_get_type
-- | Type class for types which can be safely cast to `Credentials`, for instance with `toCredentials`.
class (GObject o, O.IsDescendantOf Credentials o) => IsCredentials o
instance (GObject o, O.IsDescendantOf Credentials o) => IsCredentials o
instance O.HasParentTypes Credentials
type instance O.ParentTypes Credentials = '[GObject.Object.Object]
-- | Cast to `Credentials`, for types for which this is known to be safe. For general casts, use `Data.GI.Base.ManagedPtr.castTo`.
toCredentials :: (MonadIO m, IsCredentials o) => o -> m Credentials
toCredentials = liftIO . unsafeCastTo Credentials
-- | A convenience alias for `Nothing` :: `Maybe` `Credentials`.
noCredentials :: Maybe Credentials
noCredentials = Nothing
#if ENABLE_OVERLOADING
type family ResolveCredentialsMethod (t :: Symbol) (o :: *) :: * where
ResolveCredentialsMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
ResolveCredentialsMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
ResolveCredentialsMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
ResolveCredentialsMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
ResolveCredentialsMethod "getv" o = GObject.Object.ObjectGetvMethodInfo
ResolveCredentialsMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
ResolveCredentialsMethod "isSameUser" o = CredentialsIsSameUserMethodInfo
ResolveCredentialsMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
ResolveCredentialsMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
ResolveCredentialsMethod "ref" o = GObject.Object.ObjectRefMethodInfo
ResolveCredentialsMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
ResolveCredentialsMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
ResolveCredentialsMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
ResolveCredentialsMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
ResolveCredentialsMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
ResolveCredentialsMethod "toString" o = CredentialsToStringMethodInfo
ResolveCredentialsMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo
ResolveCredentialsMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
ResolveCredentialsMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
ResolveCredentialsMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
ResolveCredentialsMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
ResolveCredentialsMethod "getUnixPid" o = CredentialsGetUnixPidMethodInfo
ResolveCredentialsMethod "getUnixUser" o = CredentialsGetUnixUserMethodInfo
ResolveCredentialsMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
ResolveCredentialsMethod "setNative" o = CredentialsSetNativeMethodInfo
ResolveCredentialsMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
ResolveCredentialsMethod "setUnixUser" o = CredentialsSetUnixUserMethodInfo
ResolveCredentialsMethod l o = O.MethodResolutionFailed l o
instance (info ~ ResolveCredentialsMethod t Credentials, O.MethodInfo info Credentials p) => OL.IsLabel t (Credentials -> p) where
#if MIN_VERSION_base(4,10,0)
fromLabel = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)
#else
fromLabel _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)
#endif
#endif
#if ENABLE_OVERLOADING
instance O.HasAttributeList Credentials
type instance O.AttributeList Credentials = CredentialsAttributeList
type CredentialsAttributeList = ('[ ] :: [(Symbol, *)])
#endif
#if ENABLE_OVERLOADING
#endif
#if ENABLE_OVERLOADING
type instance O.SignalList Credentials = CredentialsSignalList
type CredentialsSignalList = ('[ '("notify", GObject.Object.ObjectNotifySignalInfo)] :: [(Symbol, *)])
#endif
-- method Credentials::new
-- method type : Constructor
-- Args : []
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "Gio", name = "Credentials"}))
-- throws : False
-- Skip return : False
foreign import ccall "g_credentials_new" g_credentials_new ::
IO (Ptr Credentials)
{- |
Creates a new 'GI.Gio.Objects.Credentials.Credentials' object with credentials matching the
the current process.
/Since: 2.26/
-}
credentialsNew ::
(B.CallStack.HasCallStack, MonadIO m) =>
m Credentials
{- ^ __Returns:__ A 'GI.Gio.Objects.Credentials.Credentials'. Free with 'GI.GObject.Objects.Object.objectUnref'. -}
credentialsNew = liftIO $ do
result <- g_credentials_new
checkUnexpectedReturnNULL "credentialsNew" result
result' <- (wrapObject Credentials) result
return result'
#if ENABLE_OVERLOADING
#endif
-- method Credentials::get_unix_pid
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "credentials", argType = TInterface (Name {namespace = "Gio", name = "Credentials"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A #GCredentials", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TInt)
-- throws : True
-- Skip return : False
foreign import ccall "g_credentials_get_unix_pid" g_credentials_get_unix_pid ::
Ptr Credentials -> -- credentials : TInterface (Name {namespace = "Gio", name = "Credentials"})
Ptr (Ptr GError) -> -- error
IO Int32
{- |
Tries to get the UNIX process identifier from /@credentials@/. This
method is only available on UNIX platforms.
This operation can fail if 'GI.Gio.Objects.Credentials.Credentials' is not supported on the
OS or if the native credentials type does not contain information
about the UNIX process ID.
/Since: 2.36/
-}
credentialsGetUnixPid ::
(B.CallStack.HasCallStack, MonadIO m, IsCredentials a) =>
a
{- ^ /@credentials@/: A 'GI.Gio.Objects.Credentials.Credentials' -}
-> m Int32
{- ^ __Returns:__ The UNIX process ID, or -1 if /@error@/ is set. /(Can throw 'Data.GI.Base.GError.GError')/ -}
credentialsGetUnixPid credentials = liftIO $ do
credentials' <- unsafeManagedPtrCastPtr credentials
onException (do
result <- propagateGError $ g_credentials_get_unix_pid credentials'
touchManagedPtr credentials
return result
) (do
return ()
)
#if ENABLE_OVERLOADING
data CredentialsGetUnixPidMethodInfo
instance (signature ~ (m Int32), MonadIO m, IsCredentials a) => O.MethodInfo CredentialsGetUnixPidMethodInfo a signature where
overloadedMethod _ = credentialsGetUnixPid
#endif
-- method Credentials::get_unix_user
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "credentials", argType = TInterface (Name {namespace = "Gio", name = "Credentials"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A #GCredentials", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TUInt)
-- throws : True
-- Skip return : False
foreign import ccall "g_credentials_get_unix_user" g_credentials_get_unix_user ::
Ptr Credentials -> -- credentials : TInterface (Name {namespace = "Gio", name = "Credentials"})
Ptr (Ptr GError) -> -- error
IO Word32
{- |
Tries to get the UNIX user identifier from /@credentials@/. This
method is only available on UNIX platforms.
This operation can fail if 'GI.Gio.Objects.Credentials.Credentials' is not supported on the
OS or if the native credentials type does not contain information
about the UNIX user.
/Since: 2.26/
-}
credentialsGetUnixUser ::
(B.CallStack.HasCallStack, MonadIO m, IsCredentials a) =>
a
{- ^ /@credentials@/: A 'GI.Gio.Objects.Credentials.Credentials' -}
-> m Word32
{- ^ __Returns:__ The UNIX user identifier or -1 if /@error@/ is set. /(Can throw 'Data.GI.Base.GError.GError')/ -}
credentialsGetUnixUser credentials = liftIO $ do
credentials' <- unsafeManagedPtrCastPtr credentials
onException (do
result <- propagateGError $ g_credentials_get_unix_user credentials'
touchManagedPtr credentials
return result
) (do
return ()
)
#if ENABLE_OVERLOADING
data CredentialsGetUnixUserMethodInfo
instance (signature ~ (m Word32), MonadIO m, IsCredentials a) => O.MethodInfo CredentialsGetUnixUserMethodInfo a signature where
overloadedMethod _ = credentialsGetUnixUser
#endif
-- method Credentials::is_same_user
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "credentials", argType = TInterface (Name {namespace = "Gio", name = "Credentials"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A #GCredentials.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "other_credentials", argType = TInterface (Name {namespace = "Gio", name = "Credentials"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A #GCredentials.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : True
-- Skip return : False
foreign import ccall "g_credentials_is_same_user" g_credentials_is_same_user ::
Ptr Credentials -> -- credentials : TInterface (Name {namespace = "Gio", name = "Credentials"})
Ptr Credentials -> -- other_credentials : TInterface (Name {namespace = "Gio", name = "Credentials"})
Ptr (Ptr GError) -> -- error
IO CInt
{- |
Checks if /@credentials@/ and /@otherCredentials@/ is the same user.
This operation can fail if 'GI.Gio.Objects.Credentials.Credentials' is not supported on the
the OS.
/Since: 2.26/
-}
credentialsIsSameUser ::
(B.CallStack.HasCallStack, MonadIO m, IsCredentials a, IsCredentials b) =>
a
{- ^ /@credentials@/: A 'GI.Gio.Objects.Credentials.Credentials'. -}
-> b
{- ^ /@otherCredentials@/: A 'GI.Gio.Objects.Credentials.Credentials'. -}
-> m ()
{- ^ /(Can throw 'Data.GI.Base.GError.GError')/ -}
credentialsIsSameUser credentials otherCredentials = liftIO $ do
credentials' <- unsafeManagedPtrCastPtr credentials
otherCredentials' <- unsafeManagedPtrCastPtr otherCredentials
onException (do
_ <- propagateGError $ g_credentials_is_same_user credentials' otherCredentials'
touchManagedPtr credentials
touchManagedPtr otherCredentials
return ()
) (do
return ()
)
#if ENABLE_OVERLOADING
data CredentialsIsSameUserMethodInfo
instance (signature ~ (b -> m ()), MonadIO m, IsCredentials a, IsCredentials b) => O.MethodInfo CredentialsIsSameUserMethodInfo a signature where
overloadedMethod _ = credentialsIsSameUser
#endif
-- method Credentials::set_native
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "credentials", argType = TInterface (Name {namespace = "Gio", name = "Credentials"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A #GCredentials.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "native_type", argType = TInterface (Name {namespace = "Gio", name = "CredentialsType"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The type of native credentials to set.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "native", argType = TBasicType TPtr, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A pointer to native credentials.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False
foreign import ccall "g_credentials_set_native" g_credentials_set_native ::
Ptr Credentials -> -- credentials : TInterface (Name {namespace = "Gio", name = "Credentials"})
CUInt -> -- native_type : TInterface (Name {namespace = "Gio", name = "CredentialsType"})
Ptr () -> -- native : TBasicType TPtr
IO ()
{- |
Copies the native credentials of type /@nativeType@/ from /@native@/
into /@credentials@/.
It is a programming error (which will cause an warning to be
logged) to use this method if there is no 'GI.Gio.Objects.Credentials.Credentials' support for
the OS or if /@nativeType@/ isn\'t supported by the OS.
/Since: 2.26/
-}
credentialsSetNative ::
(B.CallStack.HasCallStack, MonadIO m, IsCredentials a) =>
a
{- ^ /@credentials@/: A 'GI.Gio.Objects.Credentials.Credentials'. -}
-> Gio.Enums.CredentialsType
{- ^ /@nativeType@/: The type of native credentials to set. -}
-> Ptr ()
{- ^ /@native@/: A pointer to native credentials. -}
-> m ()
credentialsSetNative credentials nativeType native = liftIO $ do
credentials' <- unsafeManagedPtrCastPtr credentials
let nativeType' = (fromIntegral . fromEnum) nativeType
g_credentials_set_native credentials' nativeType' native
touchManagedPtr credentials
return ()
#if ENABLE_OVERLOADING
data CredentialsSetNativeMethodInfo
instance (signature ~ (Gio.Enums.CredentialsType -> Ptr () -> m ()), MonadIO m, IsCredentials a) => O.MethodInfo CredentialsSetNativeMethodInfo a signature where
overloadedMethod _ = credentialsSetNative
#endif
-- method Credentials::set_unix_user
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "credentials", argType = TInterface (Name {namespace = "Gio", name = "Credentials"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A #GCredentials.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "uid", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The UNIX user identifier to set.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : True
-- Skip return : False
foreign import ccall "g_credentials_set_unix_user" g_credentials_set_unix_user ::
Ptr Credentials -> -- credentials : TInterface (Name {namespace = "Gio", name = "Credentials"})
Word32 -> -- uid : TBasicType TUInt
Ptr (Ptr GError) -> -- error
IO CInt
{- |
Tries to set the UNIX user identifier on /@credentials@/. This method
is only available on UNIX platforms.
This operation can fail if 'GI.Gio.Objects.Credentials.Credentials' is not supported on the
OS or if the native credentials type does not contain information
about the UNIX user. It can also fail if the OS does not allow the
use of \"spoofed\" credentials.
/Since: 2.26/
-}
credentialsSetUnixUser ::
(B.CallStack.HasCallStack, MonadIO m, IsCredentials a) =>
a
{- ^ /@credentials@/: A 'GI.Gio.Objects.Credentials.Credentials'. -}
-> Word32
{- ^ /@uid@/: The UNIX user identifier to set. -}
-> m ()
{- ^ /(Can throw 'Data.GI.Base.GError.GError')/ -}
credentialsSetUnixUser credentials uid = liftIO $ do
credentials' <- unsafeManagedPtrCastPtr credentials
onException (do
_ <- propagateGError $ g_credentials_set_unix_user credentials' uid
touchManagedPtr credentials
return ()
) (do
return ()
)
#if ENABLE_OVERLOADING
data CredentialsSetUnixUserMethodInfo
instance (signature ~ (Word32 -> m ()), MonadIO m, IsCredentials a) => O.MethodInfo CredentialsSetUnixUserMethodInfo a signature where
overloadedMethod _ = credentialsSetUnixUser
#endif
-- method Credentials::to_string
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "credentials", argType = TInterface (Name {namespace = "Gio", name = "Credentials"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A #GCredentials object.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TUTF8)
-- throws : False
-- Skip return : False
foreign import ccall "g_credentials_to_string" g_credentials_to_string ::
Ptr Credentials -> -- credentials : TInterface (Name {namespace = "Gio", name = "Credentials"})
IO CString
{- |
Creates a human-readable textual representation of /@credentials@/
that can be used in logging and debug messages. The format of the
returned string may change in future GLib release.
/Since: 2.26/
-}
credentialsToString ::
(B.CallStack.HasCallStack, MonadIO m, IsCredentials a) =>
a
{- ^ /@credentials@/: A 'GI.Gio.Objects.Credentials.Credentials' object. -}
-> m T.Text
{- ^ __Returns:__ A string that should be freed with 'GI.GLib.Functions.free'. -}
credentialsToString credentials = liftIO $ do
credentials' <- unsafeManagedPtrCastPtr credentials
result <- g_credentials_to_string credentials'
checkUnexpectedReturnNULL "credentialsToString" result
result' <- cstringToText result
freeMem result
touchManagedPtr credentials
return result'
#if ENABLE_OVERLOADING
data CredentialsToStringMethodInfo
instance (signature ~ (m T.Text), MonadIO m, IsCredentials a) => O.MethodInfo CredentialsToStringMethodInfo a signature where
overloadedMethod _ = credentialsToString
#endif