Documentation
¶
Overview ¶
Package ipa is a Go client library for FreeIPA
Index ¶
- Constants
- type Algorithm
- type Client
- func (c *Client) AddTOTPToken(uid string, algo Algorithm, digits Digits, interval int) (*OTPToken, error)
- func (c *Client) ChangePassword(uid, old_passwd, new_passwd, otpcode string) error
- func (c *Client) ClearSession()
- func (c *Client) DisableOTPToken(tokenID string) error
- func (c *Client) EnableOTPToken(tokenID string) error
- func (c *Client) FetchOTPTokens(uid string) ([]*OTPToken, error)
- func (c *Client) Login(username, password string) error
- func (c *Client) LoginWithKeytab(ktab, username string) error
- func (c *Client) Ping() (*Response, error)
- func (c *Client) RemoteLogin(uid, passwd string) (string, error)
- func (c *Client) RemoveOTPToken(tokenID string) error
- func (c *Client) ResetPassword(uid string) (string, error)
- func (c *Client) SessionID() string
- func (c *Client) SetAuthTypes(uid string, types []string) error
- func (c *Client) SetPassword(uid, old_passwd, new_passwd, otpcode string) error
- func (c *Client) StickySession(enable bool)
- func (c *Client) UpdateMobileNumber(uid string, number string) error
- func (c *Client) UpdateSSHPubKeys(uid string, keys []string) ([]string, error)
- func (c *Client) UserAdd(uid, email, first, last, homedir, shell string, random bool) (*UserRecord, error)
- func (c *Client) UserDisable(uid string) error
- func (c *Client) UserEnable(uid string) error
- func (c *Client) UserShow(uid string) (*UserRecord, error)
- type Digits
- type ErrInvalidPassword
- type ErrPasswordPolicy
- type IpaDateTime
- type IpaError
- type IpaString
- type OTPToken
- type Response
- type Result
- type UserRecord
Constants ¶
const ( IpaClientVersion = "2.156" IpaDatetimeFormat = "20060102150405Z" )
const ( AlgorithmSHA1 Algorithm = "SHA1" AlgorithmSHA256 = "SHA256" AlgorithmSHA384 = "SHA384" AlgorithmSHA512 = "SHA512" )
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
FreeIPA Client
func NewClientCustomHttp ¶
New IPA Client with host, realm and custom http client
func NewDefaultClient ¶
func NewDefaultClient() *Client
New default IPA Client using host and realm from /etc/ipa/default.conf
func NewDefaultClientWithSession ¶
New default IPA Client with existing sessionID using host and realm from /etc/ipa/default.conf
func (*Client) AddTOTPToken ¶
func (c *Client) AddTOTPToken(uid string, algo Algorithm, digits Digits, interval int) (*OTPToken, error)
Add TOTP token. Returns new OTPToken
func (*Client) ChangePassword ¶
Change user password. This will run the passwd ipa command. Optionally provide an OTP if required
func (*Client) DisableOTPToken ¶
Disable OTP token.
func (*Client) EnableOTPToken ¶
Enable OTP token.
func (*Client) FetchOTPTokens ¶
Fetch all OTP tokens.
func (*Client) Login ¶
Login to FreeIPA using local kerberos login username and password
func (*Client) LoginWithKeytab ¶
Login to FreeIPA using local kerberos login with keytab and username
func (*Client) Ping ¶
Ping FreeIPA server to check connection
func (*Client) RemoteLogin ¶
Login to FreeIPA using web API with uid/passwd and set the FreeIPA session id on the client for subsequent requests.
func (*Client) RemoveOTPToken ¶
Remove OTP token
func (*Client) ResetPassword ¶
Reset user password and return new random password
func (*Client) SetAuthTypes ¶
Update user authentication types.
func (*Client) SetPassword ¶
Set user password. In FreeIPA when a password is first set or when a password is later reset it is marked as immediately expired and requires the owner to perform a password change. See here https://www.freeipa.org/page/New_Passwords_Expired for more details. This function exists to circumvent the "new passwords expired" feature of FreeIPA and allow an administrator to set a new password for a user without it being expired. This is acheived, for example, by first calling ResetPassword() then immediately calling this function. *WARNING* See https://www.freeipa.org/page/Self-Service_Password_Reset for security issues and possible weaknesses of this approach.
func (*Client) UpdateMobileNumber ¶
Update mobile number. Currently will store only a single number. Any existing numbers will be overwritten.
func (*Client) UpdateSSHPubKeys ¶
Update ssh public keys for user uid. Returns the fingerprints on success.
func (*Client) UserAdd ¶
func (c *Client) UserAdd(uid, email, first, last, homedir, shell string, random bool) (*UserRecord, error)
Add new user. If random is true a random password will be created for the user. Note this requires "User Administrators" Privilege in FreeIPA.
func (*Client) UserShow ¶
func (c *Client) UserShow(uid string) (*UserRecord, error)
Fetch user details by call the FreeIPA user-show method
type ErrInvalidPassword ¶
type ErrInvalidPassword struct {
}
FreeIPA Invalid Password Error
func (*ErrInvalidPassword) Error ¶
func (e *ErrInvalidPassword) Error() string
type ErrPasswordPolicy ¶
type ErrPasswordPolicy struct {
}
FreeIPA Password Policy Error
func (*ErrPasswordPolicy) Error ¶
func (e *ErrPasswordPolicy) Error() string
type IpaDateTime ¶
Custom FreeIPA datetime type
func (*IpaDateTime) Format ¶
func (dt *IpaDateTime) Format(layout string) string
func (*IpaDateTime) MarshalBinary ¶
func (dt *IpaDateTime) MarshalBinary() (data []byte, err error)
func (*IpaDateTime) String ¶
func (dt *IpaDateTime) String() string
func (*IpaDateTime) UnmarshalBinary ¶
func (dt *IpaDateTime) UnmarshalBinary(data []byte) error
func (*IpaDateTime) UnmarshalJSON ¶
func (dt *IpaDateTime) UnmarshalJSON(b []byte) error
Unmarshal a FreeIPA datetime. Datetimes in FreeIPA are returned using a class-hint system. Values are stored as an array with a single element indicating the type and value, for example, '[{"__datetime__": "YYYY-MM-DDTHH:MM:SSZ"]}'
type IpaError ¶
FreeIPA error
type OTPToken ¶
type OTPToken struct {
DN string `json:"dn"`
Algorithm Algorithm `json:"ipatokenotpalgorithm"`
Digits Digits `json:"ipatokenotpdigits"`
Owner IpaString `json:"ipatokenowner"`
TimeStep IpaString `json:"ipatokentotptimestep"`
UUID IpaString `json:"ipatokenuniqueid"`
ManagedBy IpaString `json:"managedby_user"`
Disabled IpaString `json:"ipatokendisabled"`
Type string `json:"type"`
URI string `json:"uri"`
}
OTPToken encapsulates FreeIPA otptokens
type Response ¶
type Response struct {
Error *IpaError `json:"error"`
Id string `json:"id"`
Principal string `json:"principal"`
Version string `json:"version"`
Result *Result `json:"result"`
}
Response returned from a FreeIPA JSON rpc call
type Result ¶
type Result struct {
Summary string `json:"summary"`
Value interface{} `json:"value"`
Data json.RawMessage `json:"result"`
}
Result returned from a FreeIPA JSON rpc call
type UserRecord ¶
type UserRecord struct {
Dn string `json:"dn"`
First IpaString `json:"givenname"`
Last IpaString `json:"sn"`
DisplayName IpaString `json:"displayname"`
Principal IpaString `json:"krbprincipalname"`
Uid IpaString `json:"uid"`
UidNumber IpaString `json:"uidnumber"`
GidNumber IpaString `json:"gidnumber"`
Groups []string `json:"memberof_group"`
SSHPubKeys []string `json:"ipasshpubkey"`
SSHPubKeyFps []string `json:"sshpubkeyfp"`
AuthTypes []string `json:"ipauserauthtype"`
HasKeytab bool `json:"has_keytab"`
HasPassword bool `json:"has_password"`
NSAccountLock bool `json:"nsaccountlock"`
HomeDir IpaString `json:"homedirectory"`
Email IpaString `json:"mail"`
Mobile IpaString `json:"mobile"`
Shell IpaString `json:"loginshell"`
SudoRules IpaString `json:"memberofindirect_sudorule"`
HbacRules IpaString `json:"memberofindirect_hbacrule"`
LastPasswdChange IpaDateTime `json:"krblastpwdchange"`
PasswdExpire IpaDateTime `json:"krbpasswordexpiration"`
PrincipalExpire IpaDateTime `json:"krbprincipalexpiration"`
LastLoginSuccess IpaDateTime `json:"krblastsuccessfulauth"`
LastLoginFail IpaDateTime `json:"krblastfailedauth"`
Randompassword string `json:"randompassword"`
}
UserRecord encapsulates user data returned from ipa user commands
func (*UserRecord) HasGroup ¶
func (u *UserRecord) HasGroup(group string) bool
Returns true if the User is in group
func (*UserRecord) OTPOnly ¶
func (u *UserRecord) OTPOnly() bool
Returns true if OTP is the only authentication type enabled
Source Files
¶
- ipa.go
- otp.go
- user.go