/// <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; } }
/// <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; } }
/// <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)); } }