public bool XidXpassFilter(HttpContext context) { var pathConfig = Config.Item["Toyota.Gbook.WebSite.TConnectApi.XidPassFilter"]; var headers = context.Request.Headers; //Hack: 大文字小文字区別するでいいかどうか確認(x-idやX-idなどを許可しない方針でよいか) //現状は13MMのISAPIフィルターの実装と同じになっている。 var xid = headers.GetValues("X-ID"); var xpass = headers.GetValues("X-Password"); try { var pairOfIdPass = xid[0] + "," + xpass[0]; var allowList = System.IO.File.ReadAllLines(GetPath(pathConfig)) .Select(_ => _.Trim()) .Where(_ => !string.IsNullOrWhiteSpace(_)); if (allowList.Contains(pairOfIdPass)) { return(true); } else { PCSiteTraceSource.InvalidAccess_Api(context.Request.RawUrl, null); return(false); } } catch (NullReferenceException) { PCSiteTraceSource.SettingKeyMissing("Toyota.Gbook.WebSite.TConnectApi.XidPassFilter"); return(false); } }
/// <summary> /// URL生成 /// </summary> /// <remarks> /// <para>この関数は、validationUrl + "?targeturl=" + targetUrl + "&ticket=" + key の形式のURL文字列を生成します。</para> /// <para>keyは暗号化され、QueryStringとして付与されます。</para> /// </remarks> /// <param name="validationUrl">検証先URL</param> /// <param name="targetUrl">遷移先URL</param> /// <param name="key">キー</param> /// <returns>認証キーを含むリダイレクト先URL</returns> public string GenerateURL(string validationUrl, string targetUrl, string key) { // メソッド開始を記録します。 PCSiteTraceSource.MethodStart(validationUrl, targetUrl, key); // 検証先ページURLのチェック(null、空白チェック) if (string.IsNullOrEmpty(validationUrl)) { throw new ArgumentNullException("validationUrl"); } // 遷移先ページ識別子のチェック(null、空白チェック) if (string.IsNullOrEmpty(targetUrl)) { throw new ArgumentNullException("targetUrl"); } // キー値のチェック(null、空白チェック) if (string.IsNullOrEmpty(key)) { throw new ArgumentNullException("key"); } try { string returnURL = ""; PCSiteTraceSource.CheckPoint("GenerateURLメソッドチェック(ターゲットURL):" + targetUrl); // SingleSignOnTicketクラスのGentrateメソッド呼び出し string encriptTicket = SingleSignOnAuthKey.Generate(key); PCSiteTraceSource.CheckPoint("GenerateURLメソッドチェック(暗号化チケット):" + encriptTicket); // 認証キーを含むリダイレクト先URL作成 StringBuilder sb = new StringBuilder(); sb.Append(validationUrl); sb.Append("?targeturl="); // targetの値をURLエンコードします。 sb.Append(System.Web.HttpUtility.UrlEncode(targetUrl)); sb.Append("&ticket="); // ase64でエンコードした時に「+、/」が入るためURLエンコードします。 sb.Append(System.Web.HttpUtility.UrlEncode(encriptTicket)); returnURL = sb.ToString(); PCSiteTraceSource.CheckPoint("GenerateURLメソッドチェック(ReturnUrl):" + returnURL); // メソッド正常終了を記録します。 PCSiteTraceSource.MethodSuccess(); return(returnURL); } catch (Exception ex) { // アプリケーションエラーをトレースします。 PCSiteTraceSource.AppError("SingleSignOn.GenerateURLを呼び出した際のException", validationUrl, targetUrl, key, ex); throw new ApplicationException(ex.Message, ex); } }
/// <summary> /// 暗号化<br/> /// Rijndael アルゴリズムを使用<br/> /// </summary> /// <param name="st">認証キー</param> /// <returns>暗号化された認証キー</returns> internal static string EncryptString(string st) { // チケットのチェック(null、空白チェック) if (st == null || st == "") { throw new ArgumentNullException("Key"); } // メソッド開始を記録します。 PCSiteTraceSource.MethodStart(st); try { // 暗号化された認証キー string encryptionTicket; byte[] key = null; byte[] iv = null; // 暗号化キーを作成します。 GenerateKey(ref key, ref iv); // 入力文字列を byte 配列に変換します。 ASCIIEncoding encoding = new ASCIIEncoding(); byte[] source = encoding.GetBytes(st); // Rijndael のサービス プロバイダを生成します。 using (RijndaelManaged myRijndael = new RijndaelManaged()) { // 入出力用のストリームを生成します。 using (MemoryStream ms = new MemoryStream()) { using (CryptoStream cs = new CryptoStream(ms, myRijndael.CreateEncryptor(key, iv), CryptoStreamMode.Write)) { // ストリームに暗号化するデータを書き込みます。 cs.Write(source, 0, source.Length); cs.Close(); // 暗号化されたデータを byte 配列で取得します。 byte[] destination = ms.ToArray(); ms.Close(); // byte 配列を文字列に変換して表示します。 encryptionTicket = Convert.ToBase64String(destination); } } } // メソッド正常終了を記録します。 PCSiteTraceSource.MethodSuccess(); return(encryptionTicket); } catch (Exception ex) { // アプリケーションエラーをトレースします。 PCSiteTraceSource.AppError("SingleSignOn.EncryptStringを呼び出した際のException", st, ex); throw new ApplicationException(ex.Message, ex); } }
public object Get(HttpRequestMessage requestMessage, string id) { var messageId = requestMessage.GetCorrelationId().ToString(); TraceSources.AddAdditionalLogItem("RequestMessageId", messageId); try { var passwordChange = new PasswordChange(); var token = passwordChange.ExpirationCheck(id); return(new IsExpiredTokenSuccessResponse { Result = passwordChange.Result != PasswordChange.ValidatedResult.IsExpired && token != null }); } catch (InvalidRequestForTConnectApiException e) { PCSiteTraceSource.InvalidRequest_Api("is-expired-token", "token", e); return(requestMessage.CreateResponse(HttpStatusCode.BadRequest)); } catch (InvalidJwtException ex) { var trace = PCSiteTraceSource.InvalidJwt(id, ex); var code = 0; trace.TryGetId(out code); return(requestMessage.CreateResponse(HttpStatusCode.BadRequest, new ErrorResponse { Errors = new Dictionary <string, string> { { "code", code.ToString() } } })); } catch (TableNotFoundException tex) { var trace = PCSiteTraceSource.ConnectionFailToAzureStorageTable_Api("StredTokenテーブルにアクセスできませんでした。", tex); var code = 0; trace.TryGetId(out code); return(requestMessage.CreateResponse(HttpStatusCode.InternalServerError, new ErrorResponse { Errors = new Dictionary <string, string> { { "code", code.ToString() } } })); } catch (Exception ex) { var trace = PCSiteTraceSource.SystemError_Api("有効期限検証APIで想定外のエラーが発生", ex); var code = 0; trace.TryGetId(out code); return(requestMessage.CreateResponse(HttpStatusCode.InternalServerError, new ErrorResponse { Errors = new Dictionary <string, string> { { "code", code.ToString() } } })); } }
protected void Application_Error(Object sender, EventArgs e) { // 例外オブジェクトを取得 Exception ex = Server.GetLastError(); if (ex is System.Web.HttpUnhandledException) { ex = ex.InnerException; } // パブリッシャに例外の出力を出力 PCSiteTraceSource.SystemError("APIで想定外のエラーが発生しました。", ex); }
protected void Application_BeginRequest(Object sender, EventArgs e) { TraceSources.AddAdditionalLogItem("RequsetId", Guid.NewGuid()); string AccessURI = HttpContext.Current.Request.Url.PathAndQuery; PCSiteTraceSource.CheckPoint("リクエストを受信しました。AccessURI: " + AccessURI); var context = HttpContext.Current; var security = new ApiSecurity(); if (!security.XidXpassFilter(context)) { context.Response.StatusCode = 404; } }
/// <summary> /// 認証キー検証 /// </summary> /// <param name="authenticationKey">認証キー</param> /// <returns>キー値</returns> public string Validate(string authenticationKey) { // 認証キーのチェック(null、空白チェック) if (authenticationKey == null || authenticationKey == "") { throw new ArgumentNullException("authenticationKey"); } // メソッド開始を記録します。 PCSiteTraceSource.MethodStart(authenticationKey); try { string key; // 復号化メソッド呼び出し後、キー情報の取り出し string[] condition = SingleSignOn.DecryptString(authenticationKey).Split(",".ToCharArray()); PCSiteTraceSource.CheckPoint("Validateメソッドチェック(キー):" + condition[0]); PCSiteTraceSource.CheckPoint("Validateメソッドチェック(チケット作成時間):" + condition[1]); PCSiteTraceSource.CheckPoint("Validateメソッドチェック(チケット有効期限):" + condition[2]); // 認証キー作成時間を取得 DateTime dt = Convert.ToDateTime(condition[1]); // 有効期限チェック:システム日付<認証キー作成時+ 有効期限(秒) if (DateTime.Now < dt.AddSeconds(Convert.ToDouble(condition[2]))) { key = condition[0]; } else { key = null; } PCSiteTraceSource.CheckPoint("Validateメソッドチェック(return値):" + key); // メソッド正常終了を記録します。 PCSiteTraceSource.MethodSuccess(); return(key); } catch (Exception ex) { // アプリケーションエラーをトレースします。 PCSiteTraceSource.AppError("SingleSignOnTicket.Validateを呼び出した際のException", authenticationKey, ex); throw new ApplicationException(ex.Message, ex); } }
public string StoreVerificationData(string mailAddress, string internalMemnerId, string memberDivision) { try { PCSiteTraceSource.MethodStart(); var tokenGenerator = new TokenGenetator(); var token = tokenGenerator.GenerateToken(internalMemnerId, new MailAddress(mailAddress)); var azureTableOperator = new AzureTableOperation(); azureTableOperator.StoreEmailAddressIfNeed(internalMemnerId, new MailAddress(mailAddress)); azureTableOperator.StorePasswordResetRequest(internalMemnerId, memberDivision); return(token); } catch (TableNotFoundException tex) { PCSiteTraceSource.ConnectionFailToAzureStorageTable("VerifiedEmailテーブル、またはStoredTokenテーブル", tex); throw; } }
public static CompanyRequest GetRequestJson_CompanyForRemindId(string request) { try { var companyReq = JsonConvert.DeserializeObject <CompanyRequest>(request); return(companyReq); } catch (JsonReaderException jex) { PCSiteTraceSource.InvalidRequest_Api("api/remind-id", request, jex); throw new InvalidJsonException(); } catch (JsonSerializationException jex) { PCSiteTraceSource.InvalidRequest_Api("api/remind-id", request, jex); throw new InvalidJsonException(); } }
internal async Task MailSend(MailAddress mailAddress, string token) { PCSiteTraceSource.MethodStart(); try { var mailsender = new VerificationMailSender(new MailTemplateGateway( new Blob( Config.Item["Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString"], Config.Item["Toyota.Gbook.WebSite.MailTemplate.ContainerName"], RetryPolicies.NoRetry()))); await mailsender.SendPasswordReminderMail(mailAddress, token); } catch (Exception ex) { PCSiteTraceSource.AppError("メールGWを利用してのメール送信中に例外が発生しました。", ex); throw; } }
public static Input_Onpre_Contact GetRequestJsonForContact(string request) { try { var onpreRequest = JsonConvert.DeserializeObject <Input_Onpre_Contact>(request); return(onpreRequest); } catch (JsonReaderException jex) { PCSiteTraceSource.InvalidRequest_Api("api/contact", request, jex); throw new InvalidRequestForContactException("Jsonとして不正"); } catch (JsonSerializationException jex) { PCSiteTraceSource.InvalidRequest_Api("api/contact", request, jex); throw new InvalidRequestForContactException("Jsonとして不正"); } }
public static PersonRequest GetRequestJsosn_PersonForRemindPass(string request) { try { var personReq = JsonConvert.DeserializeObject <PersonRequest>(request); return(personReq); } catch (JsonReaderException jex) { PCSiteTraceSource.InvalidRequest_Api("api/reset-password", request, jex); throw new InvalidJsonException(); } catch (JsonSerializationException jex) { PCSiteTraceSource.InvalidRequest_Api("api/reset-password", request, jex); throw new InvalidJsonException(); } }
/// <summary> /// UseCheckBxCookie 関数 /// </summary> /// <param name="UCheckFlg">保持フラグ</param> /// <param name="userid">ユーザーID</param> public static void UseCheckBxCookie(bool UCheckFlg, string userid) { PCSiteTraceSource.MethodStart(); // ユーザーIDの保持チェックボックスをCookieに反映 HttpCookie kie; PCSiteTraceSource.CheckPoint("UCheckFlg", UCheckFlg.ToString()); try { if (UCheckFlg) { // チェックフラグ kie = new HttpCookie("ckUSEFLG"); kie.Value = "true"; kie.Expires = DateTime.Now.Add(new System.TimeSpan(365, 0, 0, 0)); HttpContext.Current.Response.Cookies.Add(kie); PCSiteTraceSource.CheckPoint("CookiesAdd", "ckUSEFLG"); // ユーザーID kie = new HttpCookie("ckTCONNECTID"); kie.Value = userid; kie.Expires = DateTime.Now.Add(new System.TimeSpan(365, 0, 0, 0)); HttpContext.Current.Response.Cookies.Add(kie); PCSiteTraceSource.CheckPoint("CookiesAdd", "ckTCONNECTID"); } else { kie = new HttpCookie("ckUSEFLG"); kie.Value = ""; kie.Expires = DateTime.Now.Add(new System.TimeSpan(-1, 0, 0, 0)); HttpContext.Current.Response.Cookies.Add(kie); PCSiteTraceSource.CheckPoint("CookiesRemove", "ckUSEFLG"); } } catch (Exception ex) { PCSiteTraceSource.MethodFailure(ex.Message); } PCSiteTraceSource.MethodSuccess(); }
internal async Task MailSend(MailAddress mailAddress, List <string> internalMemberId) { PCSiteTraceSource.MethodStart(); try { var url = Config.Get <string>("Toyota.Gbook.WebSite.Mail.MailGW.Url"); var subject = Config.Get <string>("Toyota.Gbook.WebSite.IdRemind.Subject"); var mailsender = new VerificationMailSender(new MailTemplateGateway( new Blob( Config.Item["Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString"], Config.Item["Toyota.Gbook.WebSite.MailTemplate.ContainerName"], RetryPolicies.NoRetry()))); await mailsender.SendIdReminderMail(mailAddress, internalMemberId); } catch (Exception ex) { PCSiteTraceSource.AppError("メールGWを利用してのメール送信中に例外が発生しました。", ex); } }
/// <summary> /// 認証処理を実施します。 /// </summary> /// <param name="id">入力されたログインId</param> /// <param name="password">入力されたパスワード</param> /// <returns>認証結果</returns> public AuthResult Auth(string id, string password) { PCSiteTraceSource.MethodStart(); var auth = new Toyota.Gbook.WebSite.Security.Control.Authentication(); try { var apiResult = auth.GetOneIdAuthResult(id, password); return(AuthResult.From(apiResult)); } catch (UnauthorizedException) { PCSiteTraceSource.CheckPoint("認証APIがHTTPステータス401を返却"); return(AuthResult.Unauthorize()); } catch (NoRelationException) { PCSiteTraceSource.CheckPoint("対象のIDに紐づいたT-ConnectIDなし"); return(AuthResult.NoRelation()); } }
public void IsPersonalMember(string internalMemberId) { Toyota.Gbook.WebSite.DataAccess.Member.Entity.MemberInformationEntity mEntity = Toyota.Gbook.WebSite.DataAccess.Member.Control.Member.GetMemberInfo(internalMemberId); var memberDivisionPersonal = "1"; if (string.IsNullOrEmpty(mEntity.MemberDivision)) { PCSiteTraceSource.AppError("会員区分が取得できませんでした。内部会員Id:", internalMemberId); throw new UserNotFoundException(internalMemberId, "個人", "会員区分が取得できませんでした。"); } if (mEntity.MemberDivision == "0") { throw new UnexpectedMemberDivisionException(internalMemberId, "個人", "会員区分「0:ID、Passのみ」が返却されました。"); } else if (mEntity.MemberDivision != memberDivisionPersonal) { var memberDivision = string.Format("入力された会員区分:{0}, APIのレスポンスから取得した会員区分: {1}", "個人", ""); throw new UserNotFoundException(internalMemberId, "個人", "指定されたユーザーが存在しません。" + memberDivision); } }
/// <summary> /// コンストラクタ /// </summary> public LoginProcess() { PCSiteTraceSource.MethodStart(); // メンバ初期化 if (_SessionKeyList.Count == 0) { lock (_SessionKeyList) { if (_SessionKeyList.Count == 0) { _SessionKeyList.AddRange( typeof(SessionKey).GetFields(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static) .Select(t => t.GetValue(null).ToString())); } } } SecurityAuth = new AuthenticationDataSet(); PCSiteTraceSource.MethodSuccess(); }
/// <summary> /// TicketCookieCreate 関数 /// </summary> public static void TicketCookieCreate() { PCSiteTraceSource.MethodStart(); // 認証チケットの発行 try { // ユーザーのロール文字設定 string roles = GetRoles(); PCSiteTraceSource.CheckPoint("roles", roles); // チケット作成 FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket( 1, HttpContext.Current.Session[Constants.PCSiteNameSpace + ".InternalMemberId"].ToString(), DateTime.Now, DateTime.Now.AddMinutes(Convert.ToDouble(Config.Item[Constants.PCSiteNameSpace + ".FormsAuthentication.TicketTime"].ToString())), false, roles); // チケットのCookie暗号化 string encryptedTicket = FormsAuthentication.Encrypt(authTicket); PCSiteTraceSource.CheckPoint("encryptedTicket", encryptedTicket); // チケットのCookie生成 HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket); authCookie.Path = FormsAuthentication.FormsCookiePath; HttpContext.Current.Response.Cookies.Add(authCookie); PCSiteTraceSource.CheckPoint("CookiesAdd", FormsAuthentication.FormsCookieName, encryptedTicket, FormsAuthentication.FormsCookiePath); } catch (Exception ex) { PCSiteTraceSource.MethodFailure(ex.Message); } PCSiteTraceSource.MethodSuccess(); }
/// <summary> /// GetRoles 関数 /// </summary> /// <returns> /// <dl> /// <dt>ロール文字</dt> /// <dd>戻り値 車載機モデルのロール文字列 /// </dd> /// </dl> /// </returns> private static string GetRoles() { PCSiteTraceSource.MethodStart(); string ret = ""; try { var dataset = HttpContext.Current.Session["Toyota.Gbook.WebSite.UserDataSet"] as Toyota.Gbook.WebSite.Security.DataTransferObject.ResultCDAuthenticationUserDataSet; if (dataset != null) { if (dataset.CarInformation.First().IsTConnectNavi&& HttpContext.Current.Session["Toyota.Gbook.WebSite.IsTerminatedUser"] != null) { if ((bool)HttpContext.Current.Session["Toyota.Gbook.WebSite.IsTerminatedUser"]) { ret = Constants.ROLE.ROLE_TCONNECT_EXIT; return(ret); } else { ret = Constants.ROLE.ROLE_TCONNECT; return(ret); } } } } catch (Exception ex) { PCSiteTraceSource.MethodFailure(ex.Message); } PCSiteTraceSource.CheckPoint("return", ret); PCSiteTraceSource.MethodSuccess(); return(ret); }
/// <summary> /// 暗号化キー、初期ベクター作成 /// </summary> /// <param name="key">キー</param> /// <param name="iv">初期ベクター</param> /// <dl> /// <dt>正常終了ケース</dt> /// <dd>キー、初期ベクターが返ります。</dd> /// <dt>エラーケース</dt> /// <dd>暗号化キー、初期ベクターの取得に失敗した場合、Abort扱いとします。 /// </dd> /// </dl> private static void GenerateKey(ref byte[] key, ref byte[] iv) { // メソッド開始を記録します。 PCSiteTraceSource.MethodStart(); try { // machine.confingから暗号化キーを取得します。 string key_temp = Config.Item["Toyota.Gbook.WebSite.SingleSignOn.TicketEncryptionKey"]; // 文字列をバイト型に変換する。 key = new byte[SingleSignOn.EncryptTicketKeyIndex]; for (int i = 0, j = 0; j < SingleSignOn.EncryptTicketKeyIndex; i += 2, j++) { key[j] = Convert.ToByte(key_temp.Substring(i, 2), 16); } // machine.confingから初期ベクターを取得します。 string iv_temp = Config.Item["Toyota.Gbook.WebSite.SingleSignOn.TicketEncryptionIV"]; // 文字列をバイト型に変換する。 iv = new byte[SingleSignOn.EncryptTicketIVIndex]; for (int i = 0, j = 0; j < SingleSignOn.EncryptTicketIVIndex; i += 2, j++) { iv[j] = Convert.ToByte(key_temp.Substring(i, 2), 16); } // メソッド正常終了を記録します。 PCSiteTraceSource.MethodSuccess(); } catch (Exception ex) { // アプリケーションエラーをトレースします。 PCSiteTraceSource.AppError("SingleSignOn.GenerateKeyを呼び出した際のException", key, iv, ex); throw new ApplicationException(ex.Message, ex); } }
/// <summary> /// CheckAuthenticationTicket 関数 /// </summary> /// <returns> /// <dl> /// <dt>チケット在りケース</dt> /// <dd>戻り値 暗号解除したFormsAuthenticationTicket /// Cookieから認証チケット名の値を取り出し、暗号解除を行う。 /// </dd> /// /// <dt>チケット無しケース</dt> /// <dd>戻り値 null</dd> /// </dl> /// </returns> public static FormsAuthenticationTicket CheckAuthenticationTicket() { PCSiteTraceSource.MethodStart(); HttpCookie AuthenticationCookie = null; FormsAuthenticationTicket ret = null; // 認証チケット名のCookieを調べる try { AuthenticationCookie = HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName]; } catch (Exception ex) { AuthenticationCookie = null; PCSiteTraceSource.MethodFailure(ex.Message); } if (AuthenticationCookie != null) { // Cookie値を復号化 try { ret = FormsAuthentication.Decrypt(AuthenticationCookie.Value); } catch (Exception ex) { // 不正チケット ret = null; PCSiteTraceSource.MethodFailure(ex.Message); } } PCSiteTraceSource.MethodSuccess(); return(ret); }
/// <summary> /// 認証キー生成 /// </summary> /// <param name="key">キー値</param> /// <returns>認証キー</returns> internal static string Generate(string key) { // キー値のチェック(null、空白チェック) if (key == null || key == "") { throw new ArgumentNullException("key"); } // メソッド開始を記録します。 PCSiteTraceSource.MethodStart(key); try { // machine.confingから有効期限(秒)を取得します。 string ExpirationTime = Config.Item["Toyota.Gbook.WebSite.SingleSignOn.ExpirationTime"]; StringBuilder sb = new StringBuilder(); sb.Append(key); sb.Append(","); sb.Append(Toyota.Gbook.WebSite.Common.JapaneseDateTime.Now.ToString()); sb.Append(","); sb.Append(ExpirationTime); // メソッド正常終了を記録します。 PCSiteTraceSource.MethodSuccess(); // 暗号化メソッド呼び出し return(SingleSignOn.EncryptString(sb.ToString())); } catch (Exception ex) { // アプリケーションエラーをトレースします。 PCSiteTraceSource.AppError("SingleSignOnTicket.Generateを呼び出した際のException", key, ex); throw new ApplicationException(ex.Message, ex); } }
/// <summary> /// 認可APIの結果をDataSetに格納にし、認証結果をboolで返却します。 /// </summary> /// <param name="userDataSet">認証結果のデータセット</param> public bool AuthTConnectNavi(ResultCDAuthenticationUserDataSet userDataSet) { var auth = new Toyota.Gbook.WebSite.Security.Control.Authentication(); bool isTConnectNavi; try { isTConnectNavi = auth.SetIsTConnectNaviFlag(userDataSet); // 認証インタフェース処理結果コード SecurityResultCode = userDataSet.ReturnInformation[0].ResultCD; // T-ConnectNavi判定結果 if (!userDataSet.CarInformation[0].IsIsTConnectNaviNull()) { IsTConnectNavi = userDataSet.CarInformation[0].IsTConnectNavi; isTConnectNavi = (bool)IsTConnectNavi; } if (!isTConnectNavi) { // 143:G-BOOK未契約 isTConnectNavi = SecurityResultCode == GBOOK_UN_CONTRACT; } if (isTConnectNavi) { // 認証OK // 接続区分巻き替え for (int i = 0; i < userDataSet.CarInformation.Count; i++) { string conn = userDataSet.CarInformation[i].ConnectDivision; if (conn == SECURITY_DCM_CONNECT_VALUE) { userDataSet.CarInformation[i].ConnectDivision = Common.Constants.ConnectDCM; } else if (conn == SECURITY_MOBILE_PHONE_CONNECT_VALUE) { userDataSet.CarInformation[i].ConnectDivision = Common.Constants.ConnectMobilePhone; } } // セッション値設定 // 1件目のデータを取得する(2件以上のデータが存在することは想定外) var carInfo = userDataSet.CarInformation[0]; var memberInfo = userDataSet.MemberInformation[0]; HttpContext.Current.Session[SessionKey.USERDATASET] = userDataSet.Copy(); HttpContext.Current.Session[SessionKey.SERVICE_DIVISION] = carInfo.ServiceDivision; HttpContext.Current.Session[SessionKey.GBML_VERSION] = carInfo.GBML_VERSION; HttpContext.Current.Session[SessionKey.CONNECT_DIVISION] = carInfo.ConnectDivision; HttpContext.Current.Session[SessionKey.TCONNECT_ID] = memberInfo.TConnectId; HttpContext.Current.Session[SessionKey.PASSWORD] = memberInfo.Password; HttpContext.Current.Session[SessionKey.INTERNAL_MEMBER_ID] = memberInfo.InternalMemberId; HttpContext.Current.Session[SessionKey.MEMBER_DIVISION] = memberInfo.MemberDivision; HttpContext.Current.Session[SessionKey.IS_PRESITE_USER] = userDataSet.MemberInformation[0].PreSiteMemberFlag == "1"; // "1"=true // ESPoサイトへ渡すSession情報を格納 HttpContext.Current.Session[SessionKey.ESPO_MODEL] = Constants.MODEL.MODEL_13; HttpContext.Current.Session[SessionKey.IS_TERMINATED_USER] = SecurityResultCode == GBOOK_UN_CONTRACT; } else { // 認証失敗 _SessionKeyList.ForEach( key => { if (HttpContext.Current.Session[key] != null) { HttpContext.Current.Session.Remove(key); } }); } } catch (ApplicationException) { _SessionKeyList.ForEach( key => { if (HttpContext.Current.Session[key] != null) { HttpContext.Current.Session.Remove(key); } }); // そのままthrow throw; } catch (Exception ex) { PCSiteTraceSource.AppError(ex.Message); _SessionKeyList.ForEach( key => { if (HttpContext.Current.Session[key] != null) { HttpContext.Current.Session.Remove(key); } }); throw new ApplicationException(ex.Message, ex); } PCSiteTraceSource.MethodSuccess(); return(isTConnectNavi); }
public async Task <object> Post(HttpRequestMessage requestMessage, [FromBody] JObject request) { var messageId = requestMessage.GetCorrelationId().ToString(); TraceSources.AddAdditionalLogItem("RequestMessageId", messageId); try { CheckRequest(request); var requestXml = JsonConvert.DeserializeXmlNode(request.ToString(), "contact"); var xmlDeclaration = requestXml.CreateXmlDeclaration("1.0", "UTF-8", null); using (var stringwriter = new StringWriter()) using (var xmltextWriter = new XmlTextWriter(stringwriter)) { xmlDeclaration.WriteTo(xmltextWriter); requestXml.WriteTo(xmltextWriter); var requestBodyXml = stringwriter.ToString(); var url = new Uri(Config.Get <string>("Toyota.Gbook.WebSite.Contact.MemberUtilityApi.Url")); using (var client = new HttpClient()) using (var m = new HttpRequestMessage { Method = HttpMethod.Post, RequestUri = url, Content = new StringContent(requestBodyXml) }) { m.Headers.Add("MessageId", messageId); var xid = Config.Get <string>("Toyota.Gbook.WebSite.TConnect.XId"); var xpass = Config.Get <string>("Toyota.Gbook.WebSite.TConnect.XPassword"); m.Headers.Add("X-ID", xid); m.Headers.Add("X-Password", xpass); PCSiteTraceSource.ApiExecute_Api("問合せAPI(オンプレ)", url.ToString(), requestBodyXml); var response = await client.SendAsync(m); var responseXml = await response.Content.ReadAsStringAsync(); PCSiteTraceSource.ApiResponsed_Api("問合せAPI(オンプレ)", response.StatusCode, responseXml); if (response.StatusCode == HttpStatusCode.OK) { var x = new XmlDocument(); x.LoadXml(responseXml); var code = x.SelectSingleNode("//contact/result_code").InnerText; var result_message = x.SelectSingleNode("//contact/result_code_message").InnerText; if (code == "000000") { if (request["registered"]["user_id"] == null) { return(new SuccessResponse { UserId = "", Datetime = request["inquiry"]["input_date"].ToString() + request["inquiry"]["input_time"] }); } else { return(new SuccessResponse { UserId = request["registered"]["user_id"].ToString(), Datetime = request["inquiry"]["input_date"].ToString() + request["inquiry"]["input_time"] }); } } if (code == "100002") { //入力チェックエラー var trace = PCSiteTraceSource.UnexpectedResultCode_Api(url.ToString(), code); var errorCode = 0; trace.TryGetId(out errorCode); return(requestMessage.CreateResponse(HttpStatusCode.BadRequest)); } if (code == "300000") { //DBアクセスエラー var trace = PCSiteTraceSource.UnexpectedResultCode_Api(url.ToString(), code); var errorCode = 0; trace.TryGetId(out errorCode); return(requestMessage.CreateResponse(HttpStatusCode.InternalServerError, new ErrorResponse { Errors = new Dictionary <string, string> { { "code", errorCode.ToString() } } })); } if (code == "500000") { var trace = PCSiteTraceSource.InvalidRequest_Api(url.ToString(), requestBodyXml, null); var errorCode = 0; trace.TryGetId(out errorCode); return(requestMessage.CreateResponse(HttpStatusCode.InternalServerError, new ErrorResponse { Errors = new Dictionary <string, string> { { "code", errorCode.ToString() } } })); } if (code == "600000") { var trace = PCSiteTraceSource.ValueMissing_Api(url.ToString(), "処理結果コード"); var errorCode = 0; trace.TryGetId(out errorCode); return(requestMessage.CreateResponse(HttpStatusCode.InternalServerError, new ErrorResponse { Errors = new Dictionary <string, string> { { "code", errorCode.ToString() } } })); } if (code == "900000") { var trace = PCSiteTraceSource.SystemError_Api(string.Format("問合せAPI(オンプレ)で想定外のエラーが発生。メッセージ:", result_message), null); var errorCode = 0; trace.TryGetId(out errorCode); return(requestMessage.CreateResponse(HttpStatusCode.InternalServerError, new ErrorResponse { Errors = new Dictionary <string, string> { { "code", errorCode.ToString() } } })); } var errorTrace = PCSiteTraceSource.UnexpectedResultCode(url.ToString(), code); var unexpcetErrorCode = 0; errorTrace.TryGetId(out unexpcetErrorCode); return(requestMessage.CreateResponse(HttpStatusCode.InternalServerError, new ErrorResponse { Errors = new Dictionary <string, string> { { "code", unexpcetErrorCode.ToString() } } })); } else { var trace = PCSiteTraceSource.UnexpectedHttpStatus_Api(url.ToString(), response.StatusCode, ""); var errorCode = 0; trace.TryGetId(out errorCode); return(requestMessage.CreateResponse(HttpStatusCode.InternalServerError, new ErrorResponse { Errors = new Dictionary <string, string> { { "code", errorCode.ToString() } } })); } } } } catch (InvalidRequestForContactException ie) { PCSiteTraceSource.InvalidRequest_Api("tcmypage/api/contact", request.ToString(), ie); return(requestMessage.CreateResponse(HttpStatusCode.BadRequest)); } catch (Exception e) { var trace = PCSiteTraceSource.SystemError_Api("問合せAPIで想定外のエラーが発生", e); var code = 0; trace.TryGetId(out code); return(requestMessage.CreateResponse(HttpStatusCode.InternalServerError, new ErrorResponse { Errors = new Dictionary <string, string> { { "code", code.ToString() } } })); } }
protected void Application_EndRequest(Object sender, EventArgs e) { string AccessURI = HttpContext.Current.Request.Url.PathAndQuery; PCSiteTraceSource.CheckPoint("レスポンスを送出しました。AccessURI: " + AccessURI); }
// POST: api/ResetPassword public async Task <object> Post(HttpRequestMessage requestMessage, [FromBody] JObject request) { var messageId = requestMessage.GetCorrelationId().ToString(); TraceSources.AddAdditionalLogItem("RequestMessageId", messageId); var emailAddress = ""; try { var personReq = GetRequestJsosn_PersonForRemindPass(request.ToString()); var companyReq = GetRequestJson_CompanyForRemindPass(request.ToString()); var person = personReq.person; var company = companyReq.company; if (person != null) { if (person.member_id == null || person.birthday == null || person.email == null) { PCSiteTraceSource.InvalidRequest_Api("api/reset-password", "必須要素が存在しない", null); return(requestMessage.CreateResponse(HttpStatusCode.BadRequest)); } var memberId = person.member_id; var strBirth = person.birthday; emailAddress = person.email; if (memberId.Equals(string.Empty) || memberId.Length > 256) { PCSiteTraceSource.InvalidRequest_Api("api/reset-password", "会員ID", null); return(requestMessage.CreateResponse(HttpStatusCode.BadRequest)); } //入力チェック if (emailAddress.Equals(string.Empty) || emailAddress.Length > 256) { PCSiteTraceSource.InvalidRequest_Api("api/reset-password", "メールアドレス", null); return(requestMessage.CreateResponse(HttpStatusCode.BadRequest)); } try { DateTime.ParseExact(strBirth, "yyyyMMdd", null); } catch (Exception) { PCSiteTraceSource.InvalidRequest_Api("api/reset-password", "誕生日", null); return(requestMessage.CreateResponse(HttpStatusCode.BadRequest)); } //個人の場合I003000213 会員ログイン情報取得を呼びだす var reminder = new Toyota.Gbook.WebSite.Authentication.Control.Reminder(); //パスワード変更の場合はT-ConnectIdを指定しているため取得できうる内部会員IDは常に1件のみ。 var memberInfoList = reminder.CheckPersonalMemberExist(memberId, strBirth, emailAddress)[0]; var token = StoreVerificationData(emailAddress, memberInfoList.InternalMemberId, ReminderConstants.IsPersonalMember); await MailSend(new MailAddress(emailAddress), token); return(requestMessage.CreateResponse(HttpStatusCode.Accepted, new SuccessResponse_MessageId { message_id = messageId })); } else if (company != null) { if (company.member_id == null || company.frame_no == null || company.email == null) { PCSiteTraceSource.InvalidRequest_Api("api/reset-password", "必須要素が存在しない", null); return(requestMessage.CreateResponse(HttpStatusCode.BadRequest)); } var memberId = company.member_id; emailAddress = company.email; var vin = company.frame_no; if (memberId.Equals(string.Empty) || memberId.Length > 256) { PCSiteTraceSource.InvalidRequest_Api("api/reset-password", "会員ID", null); return(requestMessage.CreateResponse(HttpStatusCode.BadRequest)); } if (emailAddress.Equals(string.Empty) || emailAddress.Length > 256) { PCSiteTraceSource.InvalidRequest_Api("api/reset-password", "メールアドレス", null); return(requestMessage.CreateResponse(HttpStatusCode.BadRequest)); } if (vin.Equals(string.Empty) || vin.Length > 20) { PCSiteTraceSource.InvalidRequest_Api("api/reset-password", "VIN", null); return(requestMessage.CreateResponse(HttpStatusCode.BadRequest)); } //法人の場合00901:テレマサービス汎用操作API.テレマサービス契約情報取得を呼びだす var reminder = new Toyota.Gbook.WebSite.Authentication.Control.Reminder(); var memberInfo = reminder.CheckCompanyMemberExist(memberId, emailAddress, vin); var token = StoreVerificationData(emailAddress, memberInfo.InternalMemberId, ReminderConstants.IsCompanyMember); await MailSend(new MailAddress(emailAddress), token); return(requestMessage.CreateResponse(HttpStatusCode.Accepted, new SuccessResponse_MessageId { message_id = messageId })); } return(requestMessage.CreateResponse(HttpStatusCode.BadRequest)); } catch (InvalidJsonException) { return(requestMessage.CreateResponse(HttpStatusCode.BadRequest)); } catch (UserNotFoundException) { var encoding = Encoding.GetEncoding("UTF-8"); var emailBytes = encoding.GetBytes(emailAddress); var emailBase64 = System.Convert.ToBase64String(emailBytes); var ex = PCSiteTraceSource.UserNotFound_Api(emailBase64); var id = 0; ex.TryGetId(out id); return(requestMessage.CreateResponse(HttpStatusCode.Unauthorized, new ErrorResponse { Errors = new Dictionary <string, string> { { "code", id.ToString() } } })); } catch (UnexpectedMemberDivisionException) { var encoding = Encoding.GetEncoding("UTF-8"); var emailBytes = encoding.GetBytes(emailAddress); var emailBase64 = System.Convert.ToBase64String(emailBytes); var ex = PCSiteTraceSource.UnexpectedMemberDivision_Api(emailBase64); var id = 0; ex.TryGetId(out id); return(requestMessage.CreateResponse(HttpStatusCode.Unauthorized, new ErrorResponse { Errors = new Dictionary <string, string> { { "code", id.ToString() } } })); } catch (MissingFileOnBlobException mex) { var ex = PCSiteTraceSource.FileMissingOnBlob_Api(mex.FileName, mex); var id = 0; ex.TryGetId(out id); return(requestMessage.CreateResponse(HttpStatusCode.InternalServerError, new ErrorResponse { Errors = new Dictionary <string, string> { { "code", id.ToString() } } })); } catch (UnexpectedResultCodeException uex) { var ex = PCSiteTraceSource.UnexpectedResultCode_Api(uex.api, uex.resultCode); var id = 0; ex.TryGetId(out id); return(requestMessage.CreateResponse(HttpStatusCode.InternalServerError, new ErrorResponse { Errors = new Dictionary <string, string> { { "code", id.ToString() } } })); } catch (GetMemberLoginInfoFailException gex) { var ex = PCSiteTraceSource.NetworkAccessFail_Api("00000_common/Member.svc/rest/GetMemberLoginInformation", gex); var id = 0; ex.TryGetId(out id); return(requestMessage.CreateResponse(HttpStatusCode.InternalServerError, new ErrorResponse { Errors = new Dictionary <string, string> { { "code", id.ToString() } } })); } catch (TelemaServiceGeneralOperationFailException tex) { var ex = PCSiteTraceSource.NetworkAccessFail_Api("00000_common/TelemaServiceGeneralOperation.sv/rest/GetTelemaServiceContract", tex); var id = 0; ex.TryGetId(out id); return(requestMessage.CreateResponse(HttpStatusCode.InternalServerError, new ErrorResponse { Errors = new Dictionary <string, string> { { "code", id.ToString() } } })); } catch (WebApplicationFatalException wex) { var ex = PCSiteTraceSource.MethodFailure(string.Format("パスワードリセットAPIでエラーが発生。URL{0}, レスポンス:{1}", wex.Url, wex.Response)); var id = 0; ex.TryGetId(out id); return(requestMessage.CreateResponse(HttpStatusCode.InternalServerError, new ErrorResponse { Errors = new Dictionary <string, string> { { "code", id.ToString() } } })); } catch (Exception e) { var ex = PCSiteTraceSource.SystemError_Api("パスワードリセットAPIで想定外のエラーが発生", e); var id = 0; ex.TryGetId(out id); return(requestMessage.CreateResponse(HttpStatusCode.InternalServerError, new ErrorResponse { Errors = new Dictionary <string, string> { { "code", id.ToString() } } })); } }