Exemplo n.º 1
0
        /// <summary>
        /// Logins the specified user name.
        /// </summary>
        /// <param name="userName">Name of the user.</param>
        /// <param name="password">The password.</param>
        public void Login(string userName, string password)
        {
            string           authCode = null;
            TokenRequestData tokReqD  = new TokenRequestData();

            try
            {
                authCode = GetAuthCode(userName, password);
                if (string.IsNullOrEmpty(authCode))
                {
                    throw new WebException("Login denied.");
                }
            }
            catch (WebException ex)
            {
                CredentialsCorrect = false;
                return;
            }

            CredentialsCorrect = true;

            try
            {
                tokReqD.Code         = authCode;
                tokReqD.Grant_Type   = "authorization_code";
                tokReqD.Redirect_Uri = urlRedirect;
                this.token           = GetToken(tokReqD);
            }
            catch (WebException ex)
            {
                throw ex;
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Logins the specified reference tok.
        /// </summary>
        /// <param name="refTok">The reference tok.</param>
        public void Login(string refTok)
        {
            TokenRequestData reqD = new TokenRequestData();

            try
            {
                reqD.Refresh_Token = refTok;
                reqD.Grant_Type    = "refresh_token";

                this.token         = GetToken(reqD);
                CredentialsCorrect = true;
            }
            catch (WebException ex)
            {
                CredentialsCorrect = false;
                return;
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// Gets the token.
        /// </summary>
        /// <param name="reqData">The req data.</param>
        /// <returns></returns>
        private TokenResponseData GetToken(TokenRequestData reqData)
        {
            HttpWebRequest req = default(HttpWebRequest);
            WebResponse    res = default(HttpWebResponse);

            TokenResponseData resData = default(TokenResponseData);
            var postDataJson          = JsonConvert.SerializeObject(reqData);
            var postData = Encoding.UTF8.GetBytes(postDataJson);

            req        = WebRequest.CreateHttp(urlToken);
            req.Method = "POST";
            req.Headers.Add("authorization", "Basic MzU5MDM1ODY6Tm9TZWNyZXQ=");
            req.Headers.Add("origin", "https://home.innogy-smarthome.de");
            req.Headers.Add("Referer", "https://home.innogy-smarthome.de/");
            req.Headers.Add("Accept", "*/*");
            req.Headers.Add("Accept-Language", "de,en-US;q=0.7,en;q=0.3");
            req.Headers.Add("Accept-Encoding", "gzip, deflate, br");
            req.Headers.Add("content-type", "application/json");
            req.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0");
            req.Headers.Remove("Cache-Control");

            req.AllowAutoRedirect = false;

            using (reqStream = req.GetRequestStream())
            {
                reqStream.Write(postData, 0, postData.Length);
            }

            res = req.GetResponse();

            using (StreamReader reader = new StreamReader(res.GetResponseStream()))
            {
                resData = JsonConvert.DeserializeObject <TokenResponseData>(reader.ReadToEnd());
            }

            return(resData);
        }
        public static async Task <HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Anonymous, "post")] TokenRequestData input, TraceWriter log)
        {
            // pick up config
            var serviceBusNamespace = GetSetting("ServiceBusNamespace");

            if (serviceBusNamespace == null)
            {
                log.Error(@"ServiceBusNamespace not configured");
                return(new HttpResponseMessage(HttpStatusCode.InternalServerError)
                {
                    Content = new StringContent("Bad internal configuration")
                });
            }
            int serviceBusTokenTimeout;

            if (!int.TryParse(GetSetting("ServiceBusTokenTimeoutSecs"), out serviceBusTokenTimeout))
            {
                serviceBusTokenTimeout = (int)TimeSpan.FromHours(8).TotalSeconds;
            }

            // check the given inputs
            var path = input.Path;

            if (string.IsNullOrWhiteSpace(input.Permission))
            {
                return(new HttpResponseMessage(HttpStatusCode.BadRequest)
                {
                    Content = new StringContent("Missing permission and/or path")
                });
            }
            if (string.IsNullOrWhiteSpace(path))
            {
                path = "/";
            }
            // get the key config for the desired permission
            string requestedPermission = input.Permission.ToLowerInvariant();

            if (await IsCallerAuthorizedAsync(serviceBusNamespace, path, requestedPermission, ClaimsPrincipal.Current, log))
            {
                var permissionRule = GetPermissionRule(requestedPermission);
                if (permissionRule == null)
                {
                    log.Error($"Permission rule {requestedPermission} is invalid");
                    return(new HttpResponseMessage(HttpStatusCode.InternalServerError)
                    {
                        Content = new StringContent("Bad internal configuration")
                    });
                }

                // issue the token
                var        tokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider(permissionRule.Item1, permissionRule.Item2);
                UriBuilder entityUri     = new UriBuilder("http", serviceBusNamespace, -1, input.Path);
                var        token         = await tokenProvider.GetWebTokenAsync(entityUri.ToString(), requestedPermission, false, TimeSpan.FromMinutes(10));

                return(new HttpResponseMessage(HttpStatusCode.OK)
                {
                    Content = new StringContent(token)
                });
            }
            else
            {
                return(new HttpResponseMessage(HttpStatusCode.Unauthorized));
            }
        }