예제 #1
0
        /// <summary>
        /// Авторизация
        /// </summary>
        /// <param name="storage">Хранилище</param>
        /// <param name="token">Токен авторизации</param>
        /// <returns></returns>
        public async Task AuthorizeAsync(AuthStorage storage, string token)
        {
            if (string.IsNullOrEmpty(token))
            {
                throw new Exception("Задан пустой токен авторизации.");
            }

            storage.Token = token;

            // Пытаемся получить информацию о пользователе
            YResponse <YAccountResult> authInfo = await GetUserAuthAsync(storage);

            // Если не авторизован, то авторизуем
            if (string.IsNullOrEmpty(authInfo.Result.Account.Uid))
            {
                throw new Exception("Пользователь незалогинен.");
            }

            // Флаг авторизации
            storage.IsAuthorized = true;
            //var authUserDetails = await GetUserAuthDetailsAsync(storage);
            //var authUser = authUserDetails.User;

            storage.User = authInfo.Result.Account;
        }
예제 #2
0
        /// <summary>
        /// Получение ссылки для загрузки
        /// </summary>
        /// <param name="storage">Хранилище</param>
        /// <param name="track">Трек</param>
        /// <returns></returns>
        public string GetFileLink(AuthStorage storage, YTrack track)
        {
            var mainDownloadResponse    = GetMetadataForDownload(storage, track).Result.First(m => m.Codec == "mp3");
            var storageDownloadResponse = GetDownloadFileInfo(storage, mainDownloadResponse);

            return(BuildLinkForDownload(mainDownloadResponse, storageDownloadResponse));
        }
예제 #3
0
        private void HandleChangeCharacter(GameSession session)
        {
            session.FieldManager.RemovePlayer(session, session.FieldPlayer);
            DatabaseManager.UpdateCharacter(session.Player);
            AuthData authData = AuthStorage.GetData(session.Player.AccountId);

            session.SendFinal(MigrationPacket.GameToLogin(LoginEndpoint, authData));
        }
        public YandexClient( )
        {
            Log.Information("Connecting to Yandex Music...");

            yAuthStorage      = new AuthStorage(  );
            yandexMusicClient = new YandexMusicApi( );
            yandexMusicClient.User.Authorize(yAuthStorage, Config.YMLogin, Config.YMPassword);

            Log.Information("Connection to Yandex Music successful");
        }
예제 #5
0
 /// <summary>
 /// Добавление трека
 /// </summary>
 /// <param name="storage">Хранилище</param>
 /// <param name="playlist">Плейлист</param>
 /// <param name="tracks">Треки для добавления</param>
 /// <returns></returns>
 public async Task <YResponse <YPlaylist> > InsertTracksAsync(AuthStorage storage, YPlaylist playlist, params YTrack[] tracks)
 {
     return(await ChangePlaylist(storage, playlist, new List <YPlaylistChange> {
         new YPlaylistChange {
             Operation = YPlaylistChangeType.Insert,
             At = 0,
             Tracks = tracks.Select(t => t.GetKey()).ToList()
         }
     })
            .ContinueWith(p => Get(storage, p.Result.Result)));
 }
예제 #6
0
        public YandexTestHarness()
        {
            AppSettings = GetAppSettings();

            Storage = new AuthStorage(new DebugSettings("responses", "log.txt")
            {
                ClearDirectory = true
            });

            API = new YandexMusicApi();
        }
예제 #7
0
        public override void Handle(GameSession session, PacketReader packet)
        {
            byte function = packet.ReadByte();

            if (function == 0)
            {
                session.FieldManager.RemovePlayer(session, session.FieldPlayer);
                AuthData authData = AuthStorage.GetData(session.Player.AccountId);

                session.SendFinal(MigrationPacket.GameToLogin(loginEndpoint, authData));
            }
        }
예제 #8
0
        /// <summary>
        /// Выгрузка в файл
        /// </summary>
        /// <param name="storage">Хранилище</param>
        /// <param name="trackKey">Ключ трека в формате {идентификатор трека:идентификатор альбома}</param>
        /// <param name="filePath">Путь для файла</param>
        public void ExtractToFile(AuthStorage storage, string trackKey, string filePath)
        {
            var fileLink = GetFileLink(storage, trackKey);

            try {
                using (var client = new WebClient()) {
                    client.DownloadFile(fileLink, filePath);
                }
            }
            catch (Exception ex) {
                Console.WriteLine(ex.ToString());
            }
        }
예제 #9
0
        protected override T GetAccount <T>(string identifier)
        {
            try
            {
                var data = AuthStorage.GetSecured(identifier, ClientId, ClientSecret, SharedGroupAccess);

                return(string.IsNullOrWhiteSpace(data) ? null : (T)(object)Deserialize <SoundCloudAccount>(data));
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex);
            }
            return(base.GetAccount <T>(identifier));
        }
예제 #10
0
        /// <summary>
        /// Удаление
        /// </summary>
        /// <param name="storage">Хранилище</param>
        /// <param name="kinds">Тип</param>
        /// <returns></returns>
        public async Task <bool> DeleteAsync(AuthStorage storage, string kinds)
        {
            try {
                await new YPlaylistRemoveRequest(api, storage)
                .Create(kinds)
                .GetResponseAsync();

                return(true);
            }
            catch (Exception ex) {
                Console.WriteLine(ex);
            }

            return(false);
        }
예제 #11
0
        /// <summary>
        /// Получение двоичного массива данных
        /// </summary>
        /// <param name="storage">Хранилище</param>
        /// <param name="trackKey">Ключ трека в формате {идентификатор трека:идентификатор альбома}</param>
        /// <returns></returns>
        public byte[] ExtractData(AuthStorage storage, string trackKey)
        {
            var fileLink = GetFileLink(storage, trackKey);

            var bytes = default(byte[]);

            try {
                using (var client = new WebClient()) {
                    bytes = client.DownloadData(fileLink);
                }
            }
            catch (Exception ex) {
                Console.WriteLine(ex.ToString());
            }

            return(bytes);
        }
예제 #12
0
        /// <summary>
        /// Получение персональных плейлистов
        /// </summary>
        /// <param name="storage">Хранилище</param>
        /// <param name="type">Тип</param>
        /// <returns>Плейлист</returns>
        private async Task <YResponse <YPlaylist> > GetPersonalPlaylist(AuthStorage storage, YGeneratedPlaylistType type)
        {
            return(await LandingAsync(storage)
                   .ContinueWith(list =>
            {
                YPlaylist playlist = list.GetAwaiter().GetResult().Result.Blocks
                                     .FirstOrDefault(b => b.Type == "personal-playlists")
                                     ?.Entities
                                     .FirstOrDefault(e => e.Data.Type == type)
                                     ?.Data
                                     .Data;

                return playlist == null
                        ? null
                        : Get(storage, playlist);
            }));
        }
예제 #13
0
        protected override void HandleCommon(Session session, PacketReader packet)
        {
            long accountId = packet.ReadLong();
            int  tokenA    = packet.ReadInt();
            int  tokenB    = packet.ReadInt();

            Logger.Info($"LOGIN USER: {accountId}");
            AuthData authData = AuthStorage.GetData(accountId);

            if (authData == null)
            {
                throw new ArgumentException("Attempted connection to game with unauthorized account");
            }
            else if (tokenA != authData.TokenA || tokenB != authData.TokenB)
            {
                throw new ArgumentException("Attempted login with invalid tokens...");
            }

            session.Send((byte)SendOp.MOVE_RESULT, 0x00, 0x00);
        }
예제 #14
0
        /// <summary>
        /// Удаление треков
        /// </summary>
        /// <param name="storage">Хранилище</param>
        /// <param name="playlist">Плейлист</param>
        /// <param name="tracks">Треки для удаления</param>
        /// <returns></returns>
        public async Task <YResponse <YPlaylist> > DeleteTracksAsync(AuthStorage storage, YPlaylist playlist, params YTrack[] tracks)
        {
            List <YPlaylistChange> changes = RemoveIdentical(tracks)
                                             .Select(t => playlist.Tracks.Select(c => c.Track).ToList().IndexOf(t))
                                             .Where(i => i != -1)
                                             .Select(i => {
                YTrackContainer t = playlist.Tracks[i];
                return(new YPlaylistChange {
                    Operation = YPlaylistChangeType.Delete,
                    From = i,
                    To = i + 1,
                    Tracks = new List <YTrackAlbumPair> {
                        t.Track.GetKey()
                    }
                });
            })
                                             .ToList();

            return(await ChangePlaylist(storage, playlist, changes));
        }
예제 #15
0
        public void HandleSelect(LoginSession session, PacketReader packet)
        {
            long charId = packet.ReadLong();

            packet.ReadShort(); // 01 00
            logger.Info($"Logging in to game with charId:{charId}");

            var endpoint = new IPEndPoint(IPAddress.Loopback, GameServer.PORT);
            var authData = new AuthData
            {
                TokenA      = session.GetToken(),
                TokenB      = session.GetToken(),
                CharacterId = charId,
            };

            // Write AuthData to storage shared with GameServer
            AuthStorage.SetData(session.AccountId, authData);

            session.Send(MigrationPacket.LoginToGame(endpoint, authData));
            //LoginPacket.LoginError("message?");
        }
예제 #16
0
        static Clients( )
        {
            Log.Information("Connecting to Spotify...");

            SpotifyClientConfig spotify_config = SpotifyClientConfig.CreateDefault( )
                                                 .WithAuthenticator(
                new ClientCredentialsAuthenticator(
                    Config.SotifyClientID,
                    Config.SotifyClientSecret));

            _spotify_client = new SpotifyClient(spotify_config);

            Log.Information("Connection to Spotify successful");

            Log.Information("Connecting to Yandex Music...");

            _yAusthStorage       = new AuthStorage(  );
            _yandex_music_client = new YandexMusicApi( );
            _yandex_music_client.User.Authorize(_yAusthStorage, Config.YMLogin, Config.YMPassword);

            Log.Information("Connection to Yandex Music successful");
        }
예제 #17
0
        public async Task СreateOrUpdateAuthStorageAsync(string id, string acessToken, string refresh)
        {
            var authStorage = new AuthStorage()
            {
                UserId       = id,
                AcessToken   = acessToken,
                RefreshToken = refresh
            };

            var filter = new BsonDocument("_id", id);

            var user = await AuthStorages.Find(filter)
                       .FirstOrDefaultAsync();

            if (user != null)
            {
                await UpdateAuthStorageAsync(id, acessToken, refresh);

                return;
            }

            await AuthStorages.InsertOneAsync(authStorage);
        }
        public void HandleSelect(LoginSession session, PacketReader packet)
        {
            long charId = packet.ReadLong();

            packet.ReadShort(); // 01 00
            Logger.Info("Logging in to game with char id: {charId}", charId);

            string     ipAddress = Environment.GetEnvironmentVariable("IP");
            int        port      = int.Parse(Environment.GetEnvironmentVariable("GAME_PORT"));
            IPEndPoint endpoint  = new IPEndPoint(IPAddress.Parse(ipAddress), port);
            AuthData   authData  = new AuthData
            {
                TokenA      = LoginSession.GetToken(),
                TokenB      = LoginSession.GetToken(),
                CharacterId = charId,
            };

            // Write AuthData to storage shared with GameServer
            AuthStorage.SetData(session.AccountId, authData);

            session.SendFinal(MigrationPacket.LoginToGame(endpoint, authData));

            // LoginPacket.LoginError("message?");
        }
예제 #19
0
 /// <summary>
 /// Изменение плейлиста
 /// </summary>
 /// <param name="storage">Хранилище</param>
 /// <param name="playlist">Плейлист</param>
 /// <param name="changes">Список изменений</param>
 /// <returns>Плейлист после изменений</returns>
 private async Task <YResponse <YPlaylist> > ChangePlaylist(AuthStorage storage, YPlaylist playlist, List <YPlaylistChange> changes)
 {
     return(await new YPlaylistChangeRequest(api, storage)
            .Create(playlist, changes)
            .GetResponseAsync <YResponse <YPlaylist> >());
 }
예제 #20
0
 /// <summary>
 /// Удаление треков
 /// </summary>
 /// <param name="storage">Хранилище</param>
 /// <param name="playlist">Плейлист</param>
 /// <param name="tracks">Треки для удаления</param>
 /// <returns></returns>
 public YResponse <YPlaylist> DeleteTracks(AuthStorage storage, YPlaylist playlist, params YTrack[] tracks)
 {
     return(DeleteTracksAsync(storage, playlist, tracks).GetAwaiter().GetResult());
 }
예제 #21
0
 /// <summary>
 /// Получение персональных списков
 /// </summary>
 /// <param name="storage">Хранилище</param>
 /// <returns></returns>
 public async Task <YResponse <YLanding> > LandingAsync(AuthStorage storage)
 {
     return(await new YGetPlaylistMainPageRequest(api, storage)
            .Create()
            .GetResponseAsync <YResponse <YLanding> >());
 }
예제 #22
0
 /// <summary>
 /// Удаление
 /// </summary>
 /// <param name="storage">Хранилище</param>
 /// <param name="playlist">Плейлист</param>
 /// <returns></returns>
 public Task <bool> DeleteAsync(AuthStorage storage, YPlaylist playlist)
 {
     return(DeleteAsync(storage, playlist.Kind));
 }
예제 #23
0
 /// <summary>
 /// Удаление
 /// </summary>
 /// <param name="storage">Хранилище</param>
 /// <param name="playlist">Плейлист</param>
 /// <returns></returns>
 public bool Delete(AuthStorage storage, YPlaylist playlist)
 {
     return(DeleteAsync(storage, playlist.Kind).GetAwaiter().GetResult());
 }
예제 #24
0
 /// <summary>
 /// Удаление
 /// </summary>
 /// <param name="storage">Хранилище</param>
 /// <param name="kinds">Тип</param>
 /// <returns></returns>
 public bool Delete(AuthStorage storage, string kinds)
 {
     return(DeleteAsync(storage, kinds).GetAwaiter().GetResult());
 }
예제 #25
0
 /// <summary>
 /// Переименование
 /// </summary>
 /// <param name="storage">Хранилище</param>
 /// <param name="kinds">Идентификатор плейлиста</param>
 /// <param name="name">Заголовок</param>
 /// <returns></returns>
 public async Task <YResponse <YPlaylist> > RenameAsync(AuthStorage storage, string kinds, string name)
 {
     return(await new YPlaylistRenameRequest(api, storage)
            .Create(kinds, name)
            .GetResponseAsync <YResponse <YPlaylist> >());
 }
예제 #26
0
 /// <summary>
 /// Переименование
 /// </summary>
 /// <param name="storage">Хранилище</param>
 /// <param name="playlist">Плейлист</param>
 /// <param name="name">Заголовок</param>
 /// <returns></returns>
 public YResponse <YPlaylist> Rename(AuthStorage storage, YPlaylist playlist, string name)
 {
     return(RenameAsync(storage, playlist.Kind, name).GetAwaiter().GetResult());
 }
예제 #27
0
 /// <summary>
 /// Переименование
 /// </summary>
 /// <param name="storage">Хранилище</param>
 /// <param name="playlist">Плейлист</param>
 /// <param name="name">Заголовок</param>
 /// <returns></returns>
 public Task <YResponse <YPlaylist> > RenameAsync(AuthStorage storage, YPlaylist playlist, string name)
 {
     return(RenameAsync(storage, playlist.Kind, name));
 }
예제 #28
0
 /// <summary>
 /// Переименование
 /// </summary>
 /// <param name="storage">Хранилище</param>
 /// <param name="kinds">Идентификатор плейлиста</param>
 /// <param name="name">Заголовок</param>
 /// <returns></returns>
 public YResponse <YPlaylist> Rename(AuthStorage storage, string kinds, string name)
 {
     return(RenameAsync(storage, kinds, name).GetAwaiter().GetResult());
 }
예제 #29
0
 /// <summary>
 /// Получение персональных списков
 /// </summary>
 /// <param name="storage">Хранилище</param>
 /// <returns></returns>
 public YResponse <YLanding> Landing(AuthStorage storage)
 {
     return(LandingAsync(storage).GetAwaiter().GetResult());
 }
예제 #30
0
 /// <summary>
 /// Создание
 /// </summary>
 /// <param name="storage">Хранилище</param>
 /// <param name="name">Заголовок</param>
 /// <returns></returns>
 public YResponse <YPlaylist> Create(AuthStorage storage, string name)
 {
     return(CreateAsync(storage, name).GetAwaiter().GetResult());
 }