| 1 | /* |
| 2 | SPDX-FileCopyrightText: 2010 Rodrigo Belem <rclbelem@gmail.com> |
| 3 | |
| 4 | SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL |
| 5 | */ |
| 6 | |
| 7 | #ifndef ksambasharedata_h |
| 8 | #define ksambasharedata_h |
| 9 | |
| 10 | #include "kiocore_export.h" |
| 11 | #include <QExplicitlySharedDataPointer> |
| 12 | |
| 13 | class QString; |
| 14 | class KSambaShare; |
| 15 | class KSambaSharePrivate; |
| 16 | class KSambaShareDataPrivate; |
| 17 | |
| 18 | /*! |
| 19 | * \class KSambaShareData |
| 20 | * \inmodule KIOCore |
| 21 | * |
| 22 | * \brief This class represents a Samba user share. |
| 23 | * |
| 24 | * It is possible to share a directory with one or more |
| 25 | * different names, update the share details or remove. |
| 26 | * |
| 27 | * \since 4.7 |
| 28 | * \sa KSambaShare |
| 29 | */ |
| 30 | class KIOCORE_EXPORT KSambaShareData |
| 31 | { |
| 32 | public: |
| 33 | /*! |
| 34 | * \value GuestsNotAllowed |
| 35 | * \value GuestsAllowed |
| 36 | */ |
| 37 | enum GuestPermission { |
| 38 | GuestsNotAllowed, |
| 39 | GuestsAllowed, |
| 40 | }; |
| 41 | |
| 42 | /*! |
| 43 | * \value UserShareOk |
| 44 | * \value UserShareExceedMaxShares |
| 45 | * \value UserShareNameOk |
| 46 | * \value UserShareNameInvalid |
| 47 | * \value UserShareNameInUse |
| 48 | * \value UserSharePathOk |
| 49 | * \value UserSharePathInvalid |
| 50 | * \value UserSharePathNotExists |
| 51 | * \value UserSharePathNotDirectory |
| 52 | * \value UserSharePathNotAbsolute |
| 53 | * \value UserSharePathNotAllowed |
| 54 | * \value UserShareAclOk |
| 55 | * \value UserShareAclInvalid |
| 56 | * \value UserShareAclUserNotValid |
| 57 | * \value UserShareCommentOk |
| 58 | * \value UserShareGuestsOk |
| 59 | * \value UserShareGuestsInvalid |
| 60 | * \value UserShareGuestsNotAllowed |
| 61 | * \value UserShareSystemError A system error occurred; check KSambaShare::lastSystemErrorString |
| 62 | */ |
| 63 | enum UserShareError { |
| 64 | UserShareOk, |
| 65 | UserShareExceedMaxShares, |
| 66 | UserShareNameOk, |
| 67 | UserShareNameInvalid, |
| 68 | UserShareNameInUse, |
| 69 | UserSharePathOk, |
| 70 | UserSharePathInvalid, |
| 71 | UserSharePathNotExists, |
| 72 | UserSharePathNotDirectory, |
| 73 | UserSharePathNotAbsolute, |
| 74 | UserSharePathNotAllowed, |
| 75 | UserShareAclOk, |
| 76 | UserShareAclInvalid, |
| 77 | UserShareAclUserNotValid, |
| 78 | , |
| 79 | UserShareGuestsOk, |
| 80 | UserShareGuestsInvalid, |
| 81 | UserShareGuestsNotAllowed, |
| 82 | UserShareSystemError, |
| 83 | }; |
| 84 | |
| 85 | KSambaShareData(); |
| 86 | KSambaShareData(const KSambaShareData &other); |
| 87 | |
| 88 | ~KSambaShareData(); |
| 89 | |
| 90 | /*! |
| 91 | * Returns the share name. |
| 92 | */ |
| 93 | QString name() const; |
| 94 | |
| 95 | /*! |
| 96 | * Returns the share path. |
| 97 | */ |
| 98 | QString path() const; |
| 99 | |
| 100 | /*! |
| 101 | * Returns the share comment. |
| 102 | */ |
| 103 | QString () const; |
| 104 | |
| 105 | /*! |
| 106 | * Containing a string describing the permission added to the users, such as |
| 107 | * "[DOMAIN\]username1:X,[DOMAIN\]username2:X,...". X stands for "F" (full control), "R" |
| 108 | * (read-only) and "D" (deny). By default the acl is Everyone:R. |
| 109 | * |
| 110 | * Returns the share acl. |
| 111 | */ |
| 112 | QString acl() const; |
| 113 | |
| 114 | /*! |
| 115 | * Returns whether guest access to the share is allowed or not. |
| 116 | */ |
| 117 | KSambaShareData::GuestPermission guestPermission() const; |
| 118 | |
| 119 | /*! |
| 120 | * Sets the share name. If the share name is changed and valid it will remove the existing |
| 121 | * share and will create a new share. |
| 122 | * The share name cannot use a name of a system user or containing the forbidden characters |
| 123 | * '%, <, >, *, ?, |, /, \, +, =, ;, :, ",,. To check if the name is available or valid use |
| 124 | * the method KSambaShare::isShareNameAvailable(). |
| 125 | * |
| 126 | * \a name the name that will be given to the share. |
| 127 | * |
| 128 | * Returns UserShareNameOk if the name is valid, UserShareNameInvalid if the name contains invalid characters, UserShareNameInUse if the name is already in |
| 129 | * use by another shared folder or a by a system user. |
| 130 | */ |
| 131 | KSambaShareData::UserShareError setName(const QString &name); |
| 132 | |
| 133 | /*! |
| 134 | * Set the path for the share. |
| 135 | * |
| 136 | * \a path the path that will be given to the share. |
| 137 | * |
| 138 | * Returns UserSharePathOk if valid. |
| 139 | * |
| 140 | * Returns UserSharePathInvalid if the path is in invalid format. |
| 141 | * |
| 142 | * Returns UserSharePathNotExists if the path does not exists. |
| 143 | * |
| 144 | * Returns UserSharePathNotDirectory if the path points to file instead of a directory. |
| 145 | * |
| 146 | * Returns UserSharePathNotAbsolute if the path is not is absolute form. |
| 147 | * |
| 148 | * Returns UserSharePathNotAllowed if the path is not owner by the user. |
| 149 | */ |
| 150 | KSambaShareData::UserShareError setPath(const QString &path); |
| 151 | |
| 152 | /*! |
| 153 | * Sets the comment for the share. |
| 154 | * |
| 155 | * \a comment the comment that will be given to the share. |
| 156 | * |
| 157 | * Returns UserShareCommentOk always. |
| 158 | */ |
| 159 | KSambaShareData::UserShareError (const QString &); |
| 160 | |
| 161 | /*! |
| 162 | * Sets the acl to the share. |
| 163 | * |
| 164 | * \a acl the acl that will be given to the share. |
| 165 | * |
| 166 | * Returns UserShareAclOk if the acl is valid. |
| 167 | * |
| 168 | * Returns UserShareAclInvalid if the acl has invalid format. |
| 169 | * |
| 170 | * Returns UserShareAclUserNotValid if one of the users in the acl is invalid. |
| 171 | */ |
| 172 | KSambaShareData::UserShareError setAcl(const QString &acl); |
| 173 | |
| 174 | /*! |
| 175 | * Flags if guest is allowed or not to access the share. |
| 176 | * |
| 177 | * \a permission the permission that will be given to the share. |
| 178 | * |
| 179 | * Returns UserShareGuestsOk if the permission was set. |
| 180 | * |
| 181 | * Returns UserShareGuestsNotAllowed if the system does not allow guest access to the |
| 182 | * shares. |
| 183 | */ |
| 184 | KSambaShareData::UserShareError setGuestPermission(const GuestPermission &permission = KSambaShareData::GuestsNotAllowed); |
| 185 | |
| 186 | /*! |
| 187 | * Share the folder with the information that has been set. |
| 188 | * |
| 189 | * Returns UserShareOk if the share was added or other errors as applicable. Also see UserShareSystemError. |
| 190 | */ |
| 191 | KSambaShareData::UserShareError save(); |
| 192 | |
| 193 | /*! |
| 194 | * Unshare the folder held by the object. |
| 195 | * |
| 196 | * Returns UserShareOk if the share was removed or other errors as applicable. Also see UserShareSystemError. |
| 197 | */ |
| 198 | KSambaShareData::UserShareError remove(); |
| 199 | |
| 200 | KSambaShareData &operator=(const KSambaShareData &other); |
| 201 | bool operator==(const KSambaShareData &other) const; |
| 202 | bool operator!=(const KSambaShareData &other) const; |
| 203 | |
| 204 | private: |
| 205 | QExplicitlySharedDataPointer<KSambaShareDataPrivate> dd; |
| 206 | |
| 207 | friend class KSambaSharePrivate; |
| 208 | }; |
| 209 | |
| 210 | #endif |
| 211 | |