| public class TrackResponse | public class TrackResponse | ||||
| { | { | ||||
| [ProtoMember(1)] | [ProtoMember(1)] | ||||
| public int? Timestamp{ get; set; } | |||||
| public string? timestamp{ get; set; } | |||||
| [ProtoMember(2)] | [ProtoMember(2)] | ||||
| public int? Progress_ms { get; set; } | |||||
| public int? progress_ms { get; set; } | |||||
| [ProtoMember(3)] | [ProtoMember(3)] | ||||
| public bool? Is_playing { get; set; } | |||||
| public bool? is_playing { get; set; } | |||||
| [ProtoMember(4)] | [ProtoMember(4)] | ||||
| public Item? Item { get; set; } | |||||
| public Item? item { get; set; } | |||||
| } | } | ||||
| [ProtoContract] | [ProtoContract] | ||||
| public class Item | public class Item | ||||
| { | { | ||||
| [ProtoMember(1)] | [ProtoMember(1)] | ||||
| public Album? Album { get; set; } | |||||
| public Album? album { get; set; } | |||||
| [ProtoMember(2)] | [ProtoMember(2)] | ||||
| public Artist[]? Artists { get; set; } | |||||
| public Artist[]? artists { get; set; } | |||||
| [ProtoMember(3)] | [ProtoMember(3)] | ||||
| public string? Id { get; set; } | |||||
| public string? id { get; set; } | |||||
| [ProtoMember(4)] | [ProtoMember(4)] | ||||
| public string? Name { get; set; } | |||||
| public string? name { get; set; } | |||||
| [ProtoMember(5)] | [ProtoMember(5)] | ||||
| public string? Href { get; set; } | |||||
| public string? href { get; set; } | |||||
| } | } | ||||
| [ProtoContract] | [ProtoContract] | ||||
| public class Album | public class Album | ||||
| { | { | ||||
| [ProtoMember(1)] | [ProtoMember(1)] | ||||
| public string? Id { get; set; } | |||||
| public string? id { get; set; } | |||||
| [ProtoMember(2)] | [ProtoMember(2)] | ||||
| public string? Name { get; set; } | |||||
| public string? name { get; set; } | |||||
| [ProtoMember(3)] | [ProtoMember(3)] | ||||
| public Image[]? Images { get; set; } | |||||
| public Image[]? images { get; set; } | |||||
| [ProtoMember(4)] | [ProtoMember(4)] | ||||
| public string? Href { get; set; } | |||||
| public string? href { get; set; } | |||||
| } | } | ||||
| [ProtoContract] | [ProtoContract] | ||||
| public class Artist | public class Artist | ||||
| { | { | ||||
| [ProtoMember(1)] | [ProtoMember(1)] | ||||
| public string? Id { get; set; } | |||||
| public string? id { get; set; } | |||||
| [ProtoMember(2)] | [ProtoMember(2)] | ||||
| public string? Name { get; set; } | |||||
| public string? name { get; set; } | |||||
| [ProtoMember(3)] | [ProtoMember(3)] | ||||
| public string? Href { get; set; } | |||||
| public string? href { get; set; } | |||||
| } | } | ||||
| [ProtoContract] | [ProtoContract] | ||||
| public class Image | public class Image | ||||
| { | { | ||||
| [ProtoMember(1)] | [ProtoMember(1)] | ||||
| public int? Height{ get; set; } | |||||
| public int? height{ get; set; } | |||||
| [ProtoMember(2)] | [ProtoMember(2)] | ||||
| public string? Url { get; set; } | |||||
| public string? url { get; set; } | |||||
| [ProtoMember(3)] | [ProtoMember(3)] | ||||
| public int? Width { get; set; } | |||||
| public int? width { get; set; } | |||||
| } | } | ||||
| } | } |
| //app.MapGrpcService<WeatherService>(); | //app.MapGrpcService<WeatherService>(); | ||||
| app.MapGrpcService<AuthService>().EnableGrpcWeb(); | app.MapGrpcService<AuthService>().EnableGrpcWeb(); | ||||
| app.MapGrpcService<TrackService>().EnableGrpcWeb(); | app.MapGrpcService<TrackService>().EnableGrpcWeb(); | ||||
| app.MapGrpcService<StatsService>().EnableGrpcWeb(); | |||||
| app.MapCodeFirstGrpcReflectionService(); | app.MapCodeFirstGrpcReflectionService(); | ||||
| private async Task Click(){ | private async Task Click(){ | ||||
| var token = await sessionStorage.GetItemAsync<string>("token"); | var token = await sessionStorage.GetItemAsync<string>("token"); | ||||
| TokenMessage tm = new() { Token = token }; | |||||
| TokenMessage tm = new(token) ; | |||||
| SearchRequest request = new() { Query = "aitch", Type = "track", Token = token }; | SearchRequest request = new() { Query = "aitch", Type = "track", Token = token }; | ||||
| SearchResponse searchResponse = await SearchService.GetListSearchAsync(request); | SearchResponse searchResponse = await SearchService.GetListSearchAsync(request); | ||||
| <h3>Home</h3> | <h3>Home</h3> | ||||
| <p>login radi</p> | <p>login radi</p> | ||||
| <AuthorizeView> | |||||
| <Authorized> | |||||
| <p>autorizovan si</p> | |||||
| </Authorized> | |||||
| <NotAuthorized> | |||||
| <LoginRedirect/> | |||||
| </NotAuthorized> | |||||
| </AuthorizeView> | |||||
| @code { | @code { | ||||
| protected override async Task OnInitializedAsync() | protected override async Task OnInitializedAsync() | ||||
| { | { | ||||
| //string tokenS = await sessionStorage.GetItemAsync<string>("token"); | |||||
| //TokenMessage token = new TokenMessage(tokenS); | |||||
| string tokenS = await sessionStorage.GetItemAsync<string>("token"); | |||||
| TokenMessage token = new TokenMessage(tokenS); | |||||
| //TrackResponse response = await spotifyService.GetCurrentlyPlayingTrack(token); | |||||
| TrackResponse response = await spotifyService.GetCurrentlyPlayingTrack(token); | |||||
| } | } | ||||
| } | } |
| </Authorized> | </Authorized> | ||||
| <NotAuthorized> | <NotAuthorized> | ||||
| Nisi autorizovan. | Nisi autorizovan. | ||||
| <button class="btn btn-primary" @onclick="Login">Autorizuj</button> | |||||
| <button class="btn btn-primary" @onclick="LoginUser">Autorizuj</button> | |||||
| </NotAuthorized> | </NotAuthorized> | ||||
| </AuthorizeView> | </AuthorizeView> | ||||
| message = "Cao"; | message = "Cao"; | ||||
| } | } | ||||
| private async Task Login() | |||||
| private async Task LoginUser() | |||||
| { | { | ||||
| //var response = await SearchService.GetListSearchAsync(new GrpcShared.DTO.Search.SearchRequest() { Query="venom", Type = "track"}); | //var response = await SearchService.GetListSearchAsync(new GrpcShared.DTO.Search.SearchRequest() { Query="venom", Type = "track"}); | ||||
| CodeRequest authParams = await AuthService.GetAuthParams(); | CodeRequest authParams = await AuthService.GetAuthParams(); |
| using Grpc.Net.Client; | using Grpc.Net.Client; | ||||
| using Grpc.Net.Client.Web; | using Grpc.Net.Client.Web; | ||||
| using Microsoft.AspNetCore.Components; | using Microsoft.AspNetCore.Components; | ||||
| using Microsoft.AspNetCore.Components.Authorization; | |||||
| using Microsoft.AspNetCore.Components.Web; | using Microsoft.AspNetCore.Components.Web; | ||||
| using Microsoft.AspNetCore.Components.WebAssembly.Hosting; | using Microsoft.AspNetCore.Components.WebAssembly.Hosting; | ||||
| using NemAnBlazor; | using NemAnBlazor; |
| return await _serviceClient.GetAccessToken(request); | return await _serviceClient.GetAccessToken(request); | ||||
| } | } | ||||
| public override async Task<AuthenticationState> GetAuthenticationStateAsync() | |||||
| { | |||||
| string token = await _sessionStorage.GetItemAsync<string>("token"); | |||||
| //public override async Task<AuthenticationState> GetAuthenticationStateAsync() | |||||
| //{ | |||||
| // string token = await _sessionStorage.GetItemAsync<string>("token"); | |||||
| //token = "BQBMgFm6jnFNWWeZEMGIRP_f-ENPid7Kw8JubAyuWAe4JK0S1DPFGlaAdZ_Fey6ePkCnz8-cqC0oyRmrciWUy5ISUTQKDe8PTQn4iBRMYCgM0n4GnS1xAErHJcm4Vpu2TAngk-4vQUOfTQRcedNTfCaHKP4uFJgTlTI7JHGrtB-_EZLnFcZ2OQe31oFQIJ1wM3ZtvwnN"; | |||||
| if (token == null) return new AuthenticationState(new ClaimsPrincipal(new ClaimsIdentity())); | |||||
| // //token = "BQBMgFm6jnFNWWeZEMGIRP_f-ENPid7Kw8JubAyuWAe4JK0S1DPFGlaAdZ_Fey6ePkCnz8-cqC0oyRmrciWUy5ISUTQKDe8PTQn4iBRMYCgM0n4GnS1xAErHJcm4Vpu2TAngk-4vQUOfTQRcedNTfCaHKP4uFJgTlTI7JHGrtB-_EZLnFcZ2OQe31oFQIJ1wM3ZtvwnN"; | |||||
| // if (token == null) return new AuthenticationState(new ClaimsPrincipal(new ClaimsIdentity())); | |||||
| var userInfo = await _serviceClient.GetUserInfo(new TokenMessage ( token )); | |||||
| // var userInfo = await _serviceClient.GetUserInfo(new TokenMessage ( token )); | |||||
| List<Claim> claims = new(); | |||||
| // List<Claim> claims = new(); | |||||
| claims.Add(new Claim("email", userInfo.email!)); | |||||
| claims.Add(new Claim("id", userInfo.id!)); | |||||
| claims.Add(new Claim("name", userInfo.display_name!)); | |||||
| // claims.Add(new Claim("email", userInfo.email!)); | |||||
| // claims.Add(new Claim("id", userInfo.id!)); | |||||
| // claims.Add(new Claim("name", userInfo.display_name!)); | |||||
| ClaimsIdentity identity = new(claims, "jwt"); | |||||
| //ClaimsIdentity identity = new(); | |||||
| ClaimsPrincipal user = new(identity); | |||||
| AuthenticationState state = new(user); | |||||
| // ClaimsIdentity identity = new(claims, "jwt"); | |||||
| // //ClaimsIdentity identity = new(); | |||||
| // ClaimsPrincipal user = new(identity); | |||||
| // AuthenticationState state = new(user); | |||||
| NotifyAuthenticationStateChanged(Task.FromResult(state)); | |||||
| // NotifyAuthenticationStateChanged(Task.FromResult(state)); | |||||
| return state; | |||||
| } | |||||
| // return state; | |||||
| //} | |||||
| public async Task<CodeRequest> GetAuthParams() | public async Task<CodeRequest> GetAuthParams() | ||||
| { | { | ||||
| //token = "BQBMgFm6jnFNWWeZEMGIRP_f-ENPid7Kw8JubAyuWAe4JK0S1DPFGlaAdZ_Fey6ePkCnz8-cqC0oyRmrciWUy5ISUTQKDe8PTQn4iBRMYCgM0n4GnS1xAErHJcm4Vpu2TAngk-4vQUOfTQRcedNTfCaHKP4uFJgTlTI7JHGrtB-_EZLnFcZ2OQe31oFQIJ1wM3ZtvwnN"; | //token = "BQBMgFm6jnFNWWeZEMGIRP_f-ENPid7Kw8JubAyuWAe4JK0S1DPFGlaAdZ_Fey6ePkCnz8-cqC0oyRmrciWUy5ISUTQKDe8PTQn4iBRMYCgM0n4GnS1xAErHJcm4Vpu2TAngk-4vQUOfTQRcedNTfCaHKP4uFJgTlTI7JHGrtB-_EZLnFcZ2OQe31oFQIJ1wM3ZtvwnN"; | ||||
| if (token == null) return new AuthenticationState(new ClaimsPrincipal(new ClaimsIdentity())); | if (token == null) return new AuthenticationState(new ClaimsPrincipal(new ClaimsIdentity())); | ||||
| var userInfo = await _serviceClient.GetUserInfo(new TokenMessage { Token = token }); | |||||
| var userInfo = await _serviceClient.GetUserInfo(new TokenMessage (token)); | |||||
| List<Claim> claims = new(); | List<Claim> claims = new(); | ||||
| public async Task<TrackResponse> GetCurrentlyPlayingTrack(TokenMessage token) | public async Task<TrackResponse> GetCurrentlyPlayingTrack(TokenMessage token) | ||||
| { | { | ||||
| var client = _httpClientFactory.CreateClient(); | |||||
| client.DefaultRequestHeaders.Add(HeaderNames.Authorization, "Bearer " + token); | |||||
| var searchResult = await client.GetAsync($"player/currently-playing"); | |||||
| var client = _httpClientFactory.CreateClient("HttpClient"); | |||||
| client.DefaultRequestHeaders.Add(HeaderNames.Authorization, "Bearer " + token.Token); | |||||
| var searchResult = await client.GetAsync($"me/player/currently-playing"); | |||||
| var responses = JsonConvert.DeserializeObject<TrackResponse>(await searchResult.Content.ReadAsStringAsync())!; | var responses = JsonConvert.DeserializeObject<TrackResponse>(await searchResult.Content.ReadAsStringAsync())!; | ||||