#region License Information /* HeuristicLab * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL) * * This file is part of HeuristicLab. * * HeuristicLab is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * HeuristicLab is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with HeuristicLab. If not, see . */ #endregion using System; using System.Collections.Generic; using System.ServiceModel.Security; using HeuristicLab.Clients.Common.Properties; namespace HeuristicLab.Clients.Access { public sealed class UserInformation { private static UserInformation instance; public static UserInformation Instance { get { if (instance == null) instance = new UserInformation(); return instance; } } private string userName; public string UserName { get { return userName; } } private bool userExists = false; public bool UserExists { get { return userExists; } } private LightweightUser user; public LightweightUser User { get { return user; } } //the groups a user is in private List groups; public List Groups { get { return groups; } } //the roles a user has private List roles; public List Roles { get { return roles; } } private bool errorOccured; public bool ErrorOccured { get { return errorOccured; } } private Exception occuredException; public Exception OccuredException { get { return occuredException; } } private bool isInitialized = false; public static void Initialize() { if (!Instance.isInitialized) { FetchUserInformationFromServerAsync(); } } private UserInformation() { if (!Instance.isInitialized) { //this blocks, so there should be anywhere in the Optimizer startup process //a call to FetchUserInformationFromServerAsync which is non-blocking FetchUserInformationFromServer(); } } private void FetchUserInformationFromServer() { userName = Settings.Default.UserName; try { AccessClient.CallRunCreationService(x => user = x.Login()); AccessClient.CallRunCreationService(x => groups = x.GetGroupsOfCurrentUser()); AccessClient.CallRunCreationService(x => roles = x.GetRolesOfCurrentUser()); } catch (MessageSecurityException e) { //wrong username or password errorOccured = false; userExists = false; isInitialized = true; occuredException = e; return; } catch (Exception e) { errorOccured = true; userExists = false; isInitialized = false; occuredException = e; return; } errorOccured = false; userExists = true; isInitialized = true; occuredException = null; } private static void FetchUserInformationFromServerAsync() { throw new NotImplementedException(); } public void Refresh() { FetchUserInformationFromServer(); } } }