예제 #1
0
        private string GetAppUrlRedirect(string appId, string appUrl, string returnUrl, string login, string userTokenHash)
        {
            if (string.IsNullOrWhiteSpace(appId) || string.IsNullOrWhiteSpace(appUrl))
            {
                return(returnUrl.Contains("conta/login") ? "/" : returnUrl);
            }

            Uri appUri;

            Uri.TryCreate(appUrl, UriKind.Absolute, out appUri);

            if (appUri == null || !appUri.IsAbsoluteUri)
            {
                return(returnUrl);
            }


            var aplicacao = unit.AplicacaoRepository.GetByAppId(appId);

            if (aplicacao != null)
            {
                // a url informada está cadatrada para a aplicação?
                if (aplicacao.AplicacaoUrls.Any(x => x.Url.Equals(appUri.Authority, StringComparison.InvariantCultureIgnoreCase)))
                {
                    //Verificar a permissão do usuário
                    var  user         = unit.UsuarioRepository.GetByLogin(login);
                    bool temPermissao = unit.UsuarioAplicacaoRepository.VerificarPermissaoUser(login, appId);
                    if (temPermissao)
                    {
                        tokenManager.AddAppUserToken(aplicacao.AppId, userTokenHash);
                        // Criptografar User Token
                        Criptografia cripto = new Criptografia();
                        cripto.Key = aplicacao.AppKey;
                        var userTokenEncripted = cripto.Encrypt(userTokenHash);

                        return(GetReturnUrlAplicacao(appUri.OriginalString, userTokenEncripted));
                    }
                    else
                    {
                        ListAlert.Add(new Alert(string.Format("Você não tem acesso para a aplicação '{0}'", aplicacao.Nome), AlertType.Error));
                    }
                }
                else
                {
                    ListAlert.Add(new Alert(string.Format("Url informada para a aplicação '{0}' não foi encontrada no banco de dados", aplicacao.Nome), AlertType.Error));
                }
            }
            else
            {
                ListAlert.Add(new Alert(string.Format("Aplicação '{0}' não encontrada", aplicacao.Nome), AlertType.Error));
            }

            return(returnUrl);
        }