Beispiel #1
0
        /// <summary>
        /// Update the invitation UI (button, textbox and linklabel) so that
        /// the controls are enabled at the right moment.
        /// </summary>
        private void UpdateInviteStatus(Workspace kws)
        {
            if (kws == null)
            {
                btnInvite.Enabled = false;
                btnCustomInvite.Enabled = false;
                return;
            }

            bool enable = (kws.LoginStatus == KwsLoginStatus.LoggedIn &&
                           kws.IsOnlineCapable() &&
                          !kws.IsPublicKws());

            btnInvite.Enabled = enable;
            btnCustomInvite.Enabled = enable;
        }
Beispiel #2
0
 /// <summary>
 /// Return true if the workspace has a level of functionality equal to
 /// the online mode.
 /// </summary>
 public bool IsOnlineCapable()
 {
     return(Kws.IsOnlineCapable());
 }
Beispiel #3
0
        private void SetHomeTabInfos(Workspace kws)
        {
            if (kws == null)
            {
                panelHome.Visible = false;
                return;
            }

            panelHome.Visible = true;
            lblKAS.Text = kws.Kas.KasID.Host + ":" + kws.Kas.KasID.Port + " (ID: " + kws.GetExternalKwsID().ToString() + ")";

            if (kws.AppException != null)
            {
                lblKasError.Text = Base.FormatErrorMsg("application error", kws.AppException);
            }

            else if (kws.Kas.ErrorEx != null)
            {
                lblKasError.Text = Base.FormatErrorMsg("KAS error", kws.Kas.ErrorEx);
            }

            else if ((kws.Sm.GetCurrentTask() != KwsTask.WorkOnline ||
                     (kws.Kas.ConnStatus != KasConnStatus.Connected &&
                      kws.Kas.ConnStatus != KasConnStatus.Connecting)) &&
                     (kws.KasLoginHandler.LoginResult != KwsLoginResult.Accepted &&
                      kws.KasLoginHandler.LoginResult != KwsLoginResult.None))
            {
                lblKasError.Text = Base.FormatErrorMsg("login error", kws.KasLoginHandler.LoginResultString);

                if (kws.KasLoginHandler.LoginResult == KwsLoginResult.BadSecurityCreds &&
                    kws.KasLoginHandler.TicketRefusalString != "")
                {
                    lblKasError.Text += Environment.NewLine + Base.FormatErrorMsg(kws.KasLoginHandler.TicketRefusalString);
                }
            }

            else
            {
                lblKasError.Text = "";
            }

            // Determine the status to display and the task the user would
            // most likely want to undertake.
            KwsTask curTask = kws.Sm.GetCurrentTask();
            String statusText = "";
            bool btnEnabled = false;
            KwsTask btnTask = KwsTask.WorkOnline;
            String btnText = "Work online";

            if (curTask == KwsTask.Spawn)
            {
                statusText = "Creating " + Base.GetKwsString();
            }

            else if (curTask == KwsTask.Delete)
            {
                statusText = "Deleting " + Base.GetKwsString();
            }

            else if (curTask == KwsTask.Rebuild)
            {
                statusText = "Rebuilding " + Base.GetKwsString();
            }

            else if (curTask == KwsTask.Stop)
            {
                if (kws.MainStatus == KwsMainStatus.RebuildRequired)
                {
                    statusText = "Rebuild required";
                    btnEnabled = true;
                    btnTask = KwsTask.Rebuild;
                    btnText = "Rebuild " + Base.GetKwsString();
                }

                // Assume the workspace was disabled voluntarily and that
                // the user can work online. This is normally the case.
                else
                {
                    statusText = Base.GetKwsString() + " disabled";
                    btnEnabled = true;
                }
            }

            else if (curTask == KwsTask.WorkOffline)
            {
                statusText = "Working offline";
                btnEnabled = true;
            }

            else if (curTask == KwsTask.WorkOnline)
            {
                if (kws.IsOnlineCapable())
                {
                    statusText = "Working online";
                    btnEnabled = true;
                    btnTask = KwsTask.WorkOffline;
                    btnText = "Work offline";
                }

                // We're not currently connecting but we can request to.
                else if (kws.Sm.CanWorkOnline())
                {
                    statusText = "Working offline";
                    btnEnabled = true;
                }

                // We're connecting, allow disconnection.
                else
                {
                    statusText = "Connecting";
                    btnEnabled = true;
                    btnTask = KwsTask.WorkOffline;
                    btnText = "Cancel";
                }
            }

            // Update the information.
            KwsStatus.Text = statusText;
            KwsStatus.ForeColor = m_uiBroker.Browser.GetKwsNodeByKws(kws).GetKwsIconImageKey();
            KwsTaskBtn.Enabled = btnEnabled;
            KwsTaskBtn.Text = btnText;
            m_kwsTaskBtnTask = btnTask;

            // Set the workspace general information.
            picSecure.Visible = kws.CoreData.Credentials.SecureFlag;
            lblSecureNote.Visible = kws.CoreData.Credentials.SecureFlag;
            lblName.Text = kws.GetKwsName();

            KwsUser creator = kws.CoreData.UserInfo.Creator;
            if (creator != null)
            {
                lblByName.Text = creator.UiFullName;
                lblByOrgName.Text = creator.OrgName;
                lblCreationDate.Text = Base.KDateToDateTime(creator.InvitationDate).ToString();
            }

            else
            {
                lblByName.Text = lblByOrgName.Text = lblCreationDate.Text = "";
            }
        }
Beispiel #4
0
        ////////////////////////////////////
        // Complex user request handlers. //
        ////////////////////////////////////
        /// <summary>
        /// Return true if the user is allowed to perform the requested action on
        /// the given user in the given workspace. If the user is not allowed, false is returned and denyReason
        /// is set with a user-friendly string.
        /// </summary>
        public bool CanPerformUserAction(UserAction action, Workspace kws, KwsUser target, ref String denyReason)
        {
            // To perform any action, we must be connected to the workspace.
            if (!kws.IsOnlineCapable())
            {
                denyReason = "You are not allowed to perform this operation: the " + Base.GetKwsString() + " is not connected.";
                return false;
            }

            switch (action)
            {
                case UserAction.ChangeRole:
                    {
                        denyReason = "Feature not available yet.";
                        return false;
                    }
                case UserAction.Copy:
                    {
                        return true;
                    }
                case UserAction.Delete:
                    {
                        denyReason = "Feature not available yet.";
                        return false;
                    }
                case UserAction.ChangeDisabledAccountFlag:
                    {
                        denyReason = "Feature not available yet.";
                        return false;
                    }
                case UserAction.ShowProperties:
                    {
                        return true;
                    }
                case UserAction.ResendInvitation:
                    {
                        denyReason = "Feature not available yet.";
                        return false;
                    }
                case UserAction.ResetPassword:
                    {
                        if (!kws.CoreData.Credentials.SecureFlag)
                        {
                            denyReason = "Feature available in Secure " + Base.GetKwsString() + " only.";
                            return false;
                        }

                        // Everyone can reset his own password. Only admins can set other
                        // people's.
                        if (target.UserID != kws.CoreData.Credentials.UserID &&
                            !kws.CoreData.Credentials.AdminFlag)
                        {
                            denyReason = "This functionnality is only available to " + Base.GetKwsString() + " Administrators and Managers.";
                            return false;
                        }

                        return true;
                    }
                case UserAction.SetName:
                    {
                        denyReason = "Changing the name of a user is not supported yet.";

                        // FIXME adapt for new user powers.
                        if (kws.CoreData.Credentials.AdminFlag)
                        {
                            return false;
                        }

                        // A normal user cannot change his name if he has an
                        // Admin name set.
                        else if (kws.CoreData.Credentials.UserID == target.UserID &&
                                 target.HasAdminName())
                        {
                            denyReason = "Your name has been set by an Administrator. Only an Administrator may change it.";
                        }

                        // A normal user cannot change someone else's Admin name.
                        else if (kws.CoreData.Credentials.UserID != target.UserID)
                        {
                            denyReason = "Only Administrators can change someone else's username.";
                        }

                        return false;
                    }
                default:
                    denyReason = "unknown action";
                    return false;
            }
        }
Beispiel #5
0
        public void UpdateUI(Workspace kws)
        {
            if (kws == null) return;
            // Determine the status to display and the task the user would
            // most likely want to undertake.
            KwsTask curTask = kws.Sm.GetCurrentTask();
            String statusText = "";
            bool btnEnabled = false;
            KwsTask btnTask = KwsTask.WorkOnline;
            String btnText = "Connect";

            if (curTask == KwsTask.Spawn)
            {
                statusText = "Creating " + Base.GetKwsString();
            }

            else if (curTask == KwsTask.Remove)
            {
                statusText = "Deleting " + Base.GetKwsString();
            }

            else if (curTask == KwsTask.Rebuild)
            {
                statusText = "Rebuilding " + Base.GetKwsString();
            }

            else if (curTask == KwsTask.Stop)
            {
                if (kws.MainStatus == KwsMainStatus.RebuildRequired)
                {
                    statusText = "Rebuild required";
                    btnEnabled = true;
                    btnTask = KwsTask.Rebuild;
                    btnText = "Rebuild " + Base.GetKwsString();
                }

                // Assume the workspace was disabled voluntarily and that
                // the user can work online. This is normally the case.
                else
                {
                    statusText = Base.GetKwsString() + " disabled";
                    btnEnabled = true;
                }
            }

            else if (curTask == KwsTask.WorkOffline)
            {
                statusText = "Disconnected";
                btnEnabled = true;
            }

            else if (curTask == KwsTask.WorkOnline)
            {
                if (kws.IsOnlineCapable())
                {
                    statusText = "Connected";
                    btnEnabled = true;
                    btnTask = KwsTask.WorkOffline;
                    btnText = "Disconnect";
                }

                // We're not currently connecting but we can request to.
                else if (kws.Sm.CanWorkOnline())
                {
                    statusText = "Disconnected";
                    btnEnabled = true;
                }

                // We're connecting, allow disconnection.
                else
                {
                    statusText = "Connecting";
                    btnEnabled = true;
                    btnTask = KwsTask.WorkOffline;
                    btnText = "Cancel";
                }
            }
            else if (curTask == KwsTask.DeleteOnServer)
            {
                statusText = "Deleting from server...";
            }

            // Update the information.
            KwsBrowserKwsNode node = UiBroker.Browser.GetKwsNodeByKws(kws);
            lblStatus.Text = statusText;
            lblStatus.ForeColor = node.GetKwsIconImageKey();
            imgKwsStatus.Image = KwmMisc.GetKwmStateImageFromKey(lblStatus.ForeColor);
            btnKwsTask.Enabled = btnEnabled;
            btnKwsTask.Text = btnText;
            m_kwsTaskBtnTask = btnTask;

            picSecure.Visible = kws.CoreData.Credentials.SecureFlag;

            UpdateKwsNameLocation();
            lblKwsName.Text = kws.GetKwsName();

            KwsUser creator = kws.CoreData.UserInfo.Creator;
            if (creator != null)
            {
                DateTime creationDate = Base.KDateToDateTime(creator.InvitationDate);
                lblCreator.Text = creator.EmailAddress + " (" + creationDate.ToString("ddd, dd MMM yyyy") + ")";
            }

            else
            {
                lblCreator.Text = "unkown";
            }

            lblServer.Text = kws.Kas.KasID.Host + " (ID: " + kws.GetExternalKwsID() + ")";

            SetKasErrorField(kws);
        }