private static MailRuCloud.Api.MailRuCloud CreateCloud(HttpListenerBasicIdentity identity)
        {
            Logger.Info($"Cloud instance created for {identity.Name}");

            if (!ConstSettings.AvailDomains.Any(d => identity.Name.Contains($"@{d}.")))
            {
                string domains = ConstSettings.AvailDomains.Aggregate((c, n) => c + ", @" + n);
                Logger.Warn($"Missing domain part ({domains}) in login, file and folder deleting will be denied");
            }

            //2FA authorization
            ITwoFaHandler twoFaHandler = null;

            if (!string.IsNullOrEmpty(TwoFactorHandlerName))
            {
                twoFaHandler = TwoFaHandlers.Get(TwoFactorHandlerName);
                if (null == twoFaHandler)
                {
                    Logger.Error($"Cannot load two-factor auth handler {TwoFactorHandlerName}");
                }
            }

            var cloud = new MailRuCloud.Api.MailRuCloud(identity.Name, identity.Password, twoFaHandler);

            return(cloud);
        }
示例#2
0
        /// <summary>
        /// Initializes a new instance of the <see cref="Account" /> class.
        /// </summary>
        /// <param name="cloudApi"></param>
        /// <param name="login">Login name as email.</param>
        /// <param name="password">Password related with this login</param>
        /// <param name="twoFaHandler"></param>
        public Account(CloudApi cloudApi, string login, string password, ITwoFaHandler twoFaHandler)
        {
            _cloudApi = cloudApi;
            LoginName = login;
            Password  = password;

            WebRequest.DefaultWebProxy.Credentials = CredentialCache.DefaultCredentials;
            Proxy = WebRequest.DefaultWebProxy;

            var twoFaHandler1 = twoFaHandler;

            if (twoFaHandler1 != null)
            {
                AuthCodeRequiredEvent += twoFaHandler1.Get;
            }

            _bannedShards = new Cached <List <ShardInfo> >(() => new List <ShardInfo>(),
                                                           TimeSpan.FromMinutes(4));

            _cachedShards = new Cached <Dictionary <ShardType, ShardInfo> >(() => new ShardInfoRequest(_cloudApi).MakeRequestAsync().Result.ToShardInfo(),
                                                                            TimeSpan.FromSeconds(ShardsExpiresInSec));

            DownloadToken = new Cached <string>(() => new DownloadTokenRequest(_cloudApi).MakeRequestAsync().Result.ToToken(),
                                                TimeSpan.FromSeconds(DownloadTokenExpiresSec));

            AuthToken = new Cached <string>(() =>
            {
                Logger.Debug("AuthToken expired, refreshing.");
                var token = new AuthTokenRequest(_cloudApi).MakeRequestAsync().Result.ToToken();
                DownloadToken.Expire();
                return(token);
            },
                                            TimeSpan.FromSeconds(AuthTokenExpiresInSec));
        }
示例#3
0
        /// <summary>
        /// Initializes a new instance of the <see cref="MailRuCloud" /> class.
        /// </summary>
        /// <param name="login">Login name as the email.</param>
        /// <param name="password">Password, associated with this email.</param>
        /// <param name="twoFaHandler"></param>
        public MailRuCloud(string login, string password, ITwoFaHandler twoFaHandler)
        {
            CloudApi = new CloudApi(login, password, twoFaHandler);

            //TODO: wow very dummy linking, refact cache realization globally!
            _itemCache = new StoreItemCache(TimeSpan.FromSeconds(60))
            {
                CleanUpPeriod = TimeSpan.FromMinutes(5)
            };
            _linkManager = new LinkManager(this);
        }
示例#4
0
        public CloudApi(string login, string password, ITwoFaHandler twoFaHandler)
        {
            Account = new Account(this, login, password, twoFaHandler);
            if (!Account.Login())
            {
                throw new AuthenticationException("Auth token has't been retrieved.");
            }

            //_cachedShards = new Cached<Dictionary<ShardType, ShardInfo>>(() => new ShardInfoRequest(this).MakeRequestAsync().Result.ToShardInfo(),
            //    TimeSpan.FromMinutes(2));
        }
示例#5
0
        private static ITwoFaHandler LoadHandler(TwoFactorAuthHandlerInfo handlerInfo)
        {
            ITwoFaHandler twoFaHandler = null;

            if (!string.IsNullOrEmpty(handlerInfo.Name))
            {
                twoFaHandler = TwoFaHandlers.Get(handlerInfo);
                if (null == twoFaHandler)
                {
                    Logger.Error($"Cannot load two-factor auth handler {handlerInfo.Name}");
                }
            }

            return(twoFaHandler);
        }
        public static ITwoFaHandler Get(TwoFactorAuthHandlerInfo handlerInfo)
        {
            var type = HandlerTypes.FirstOrDefault(t => t.Name == handlerInfo.Name);

            if (null == type)
            {
                return(null);
            }

            ITwoFaHandler inst = null;

            try
            {
                inst = (ITwoFaHandler)Activator.CreateInstance(type, handlerInfo.Parames);
            }
            catch (Exception e)
            {
                Logger.Error($"Cannot create instance of 2FA handler {handlerInfo.Name}. {e}");
            }

            return(inst);
        }