From c3ac76a94e7876b385c6357a32b4ee6fc6539c53 Mon Sep 17 00:00:00 2001 From: Seonkyu_Kim Date: Thu, 20 Feb 2025 17:47:51 +0900 Subject: [PATCH] =?UTF-8?q?[[=E2=9C=A8]=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20?= =?UTF-8?q?=EA=B4=80=EB=A0=A8(=ED=9A=8C=EC=9B=90=EA=B0=80=EC=9E=85,=20?= =?UTF-8?q?=ED=9A=8C=EC=9B=90=EC=A1=B0=ED=9A=8C)=20=EB=B6=80=EB=B6=84=20AP?= =?UTF-8?q?I=20=EC=9E=91=EC=97=85=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Program.cs | 10 ++- Program/V1/Controllers/UserController.cs | 79 ++++++++++++++++------- Program/V1/Models/Academy.cs | 2 + Program/V1/Models/User.cs | 77 ++++++++++++++++++++-- private/AM_Push.p12 | Bin 0 -> 3523 bytes private/AM_Push_Sandbox.p12 | Bin 0 -> 3507 bytes private/AuthKey_ZJ9G89X363.p8 | 6 ++ private/appleKeys.json | 3 + private/dbSetting.json | 5 ++ private/jwtSetting.Development.json | 11 ++++ private/jwtSetting.json | 11 ++++ 11 files changed, 177 insertions(+), 27 deletions(-) create mode 100755 private/AM_Push.p12 create mode 100755 private/AM_Push_Sandbox.p12 create mode 100755 private/AuthKey_ZJ9G89X363.p8 create mode 100755 private/appleKeys.json create mode 100755 private/dbSetting.json create mode 100755 private/jwtSetting.Development.json create mode 100755 private/jwtSetting.json diff --git a/Program.cs b/Program.cs index 9bc14f9..a48805d 100644 --- a/Program.cs +++ b/Program.cs @@ -38,7 +38,15 @@ var dbString = builder.Configuration.GetConnectionString("MariaDbConnection"); var userString = builder.Configuration.GetConnectionString("DBAccount"); // JWT 설정부 시작 -builder.Configuration.AddJsonFile("private/jwtSetting.json", optional: true, reloadOnChange: true); +if (builder.Environment.IsDevelopment()) +{ + builder.Configuration.AddJsonFile("private/jwtSetting.Development.json", optional: true, reloadOnChange: true); +} +else +{ + builder.Configuration.AddJsonFile("private/jwtSetting.json", optional: true, reloadOnChange: true); +} + builder.Services.Configure(builder.Configuration.GetSection("JwtSettings")); builder.Services.AddAuthentication(options => diff --git a/Program/V1/Controllers/UserController.cs b/Program/V1/Controllers/UserController.cs index 1a83408..d2c8c99 100644 --- a/Program/V1/Controllers/UserController.cs +++ b/Program/V1/Controllers/UserController.cs @@ -3,7 +3,8 @@ using System.Text.Json; using AcaMate.Common.Data; using AcaMate.Common.Models; using AcaMate.V1.Models; - +using Microsoft.AspNetCore.Http.HttpResults; +using Microsoft.IdentityModel.Tokens; namespace AcaMate.V1.Controllers; @@ -63,7 +64,7 @@ public class UserController: ControllerBase [HttpGet("login")] [CustomOperation("SNS 로그인", "로그인 후 회원이 있는지 확인", "사용자")] - public IActionResult SNSLogin(string acctype, string sns_id) + public IActionResult Login(string acctype, string sns_id) { if (string.IsNullOrEmpty(acctype) && string.IsNullOrEmpty(sns_id)) @@ -74,41 +75,61 @@ public class UserController: ControllerBase try { var login = _dbContext.Login.FirstOrDefault(l => l.sns_type == acctype && l.sns_id == sns_id); - string uid = ""; List bids = new List(); if (login != null) { uid = login.uid; - var userAcademy = _dbContext.UserAcademy.Where(u => u.uid == uid).ToList(); + var user = _dbContext.User.FirstOrDefault(user => user.uid == uid); + if (user != null) + { + user.login_date = DateTime.Now; + _dbContext.SaveChanges(); + } + + var userAcademy = _dbContext.UserAcademy.Where(u => u.uid == uid).ToList(); foreach(User_Academy userData in userAcademy) { Console.WriteLine($"uid: {userData.uid} || bid: {userData.bid}"); bids.Add(userData.bid); } + + var response = new APIResponseStatus + { + status = new Status() + { + code = "000", + message = "정상" + }, + data = new + { + uid = $"{uid}", + bid = bids + } + }; + + return Ok(response.JsonToString()); } else { - return StatusCode(002, DefaultResponse.NotFoundError); + // 계정이 없다는 거 + var response = new APIResponseStatus + { + status = new Status() + { + code = "010", + message = "정상" + }, + data = new + { + uid = "", + bid = new string[]{} + } + }; + return Ok(response.JsonToString()); } - - var response = new APIResponseStatus - { - status = new Status() - { - code = "000", - message = "정상" - }, - data = new - { - uid = $"{uid}", - bid = bids - } - }; - - return Ok(response.JsonToString()); } catch (Exception ex) { @@ -148,5 +169,19 @@ public class UserController: ControllerBase return Ok(response); } - + [HttpPost("register")] + [CustomOperation("회원 가입", "사용자 회원 가입", "사용자")] + public IActionResult UserRegister([FromBody] User request) + { + if (request.uid.IsNullOrEmpty()) + { + var error = DefaultResponse.InvalidInputError; + return Ok(error); + } + else + { + return Ok("회원가입"); + } + } + } \ No newline at end of file diff --git a/Program/V1/Models/Academy.cs b/Program/V1/Models/Academy.cs index e097311..8f8cc02 100644 --- a/Program/V1/Models/Academy.cs +++ b/Program/V1/Models/Academy.cs @@ -17,6 +17,8 @@ public class Academy public string uid { get; set; } } +// -- -- -- -- -- DB 테이블 -- -- -- -- -- // + public class AcademyName { public string bid { get; set; } diff --git a/Program/V1/Models/User.cs b/Program/V1/Models/User.cs index 576dc8f..c1c0871 100644 --- a/Program/V1/Models/User.cs +++ b/Program/V1/Models/User.cs @@ -14,10 +14,6 @@ public class Login public string uid {get; set;} [MaxLength(4)] public string sns_type {get; set;} - [MaxLength(255)] - public string sns_token {get; set;} - [MaxLength(100)] - public string sns_email {get; set;} } [Table("user_academy")] @@ -42,3 +38,76 @@ public class User public int auto_login_yn { get; set; } public DateTime login_date { get; set; } } + + +[Table("permission")] +public class Permission +{ + [Key] + public string uid { get; set; } + + public bool location_yn {get; set;} + public bool camera_yn {get; set;} + public bool photo_yn {get; set;} + public bool push_yn {get; set;} + public bool market_app_yn {get; set;} + public bool market_sms_yn {get; set;} + public bool market_email_yn {get; set;} +} + +[Table("token")] +public class Token +{ + [Key] + public string uid { get; set; } + public string refresh_token { get; set; } + public DateTime create_date { get; set; } + public DateTime expires_date { get; set; } + public DateTime revoke_date { get; set; } +} + +[Table("location")] +public class Location +{ + [Key] + public string uid { get; set; } + public string lat { get; set; } + public string lng { get; set; } +} + +[Table("contact")] +public class Contact +{ + [Key] + public string uid { get; set; } + public string email { get; set; } + public string phone { get; set; } +} + +// -- -- -- -- -- DB 테이블 -- -- -- -- -- // + +public class UserAll +{ + public string uid { get; set; } + public string name { get; set; } + public DateTime birth { get; set; } + public string type { get; set; } + public string device_id { get; set; } + public int auto_login_yn { get; set; } + public DateTime login_date { get; set; } + + public string email { get; set; } + public string phone { get; set; } + + public bool location_yn {get; set;} + public bool camera_yn {get; set;} + public bool photo_yn {get; set;} + public bool push_yn {get; set;} + public bool market_app_yn {get; set;} + public bool market_sms_yn {get; set;} + public bool market_email_yn {get; set;} + + public string sns_id {get; set;} + public string sns_type {get; set;} + public string sns_email {get; set;} +} \ No newline at end of file diff --git a/private/AM_Push.p12 b/private/AM_Push.p12 new file mode 100755 index 0000000000000000000000000000000000000000..905b88f48594f507cafb0800943dd6d9a50d2cd2 GIT binary patch literal 3523 zcmY+GXEYm(8pkCf5__xB60sGrYL=QcT2$4hMu`@sM%8MGRW)1GjM`c&HnI1JO^ORzY!f=01-Y7)m~0=KVt}A zrg%^JSCNED!(Q*$yOa`o)n8v=)6s8|BE2eJSsgXlO{nbmCOmJ*Xv=JhbB#sP@|IOH z0v=&hTX>z`VZJqyi-f{R%S$$EQfaJgna9-6b9Z*%^hmyHG$rmha!wi3N{V?aJrP{= zwz+g};CDJ^aLCXKh>vX0p}d4bc(eR_H(Q@2oN1MxUH>p58d#W}w-zRtw6E8&@-Aom zVNGRwpKwa4CiFhZS8cPhO$%|(N*7bp2O9%LdZ9^2nA&-f;H9@8@|7iF1B%8Z_4OOc zGkZAllUbyC4{o-Y;N!ip=&XC?5`FD6M%EM< zmz^z|wwxggB`T{eC+MPy;Fr8p?R%WV!2yHTsWDxOr15Bf*%=XPe`6jk==a~65e*g& z;cFZ+Xf)?)`q|y^-2Bx|XB`;8bh$pG04f0e-m)&}0EaB#J7eO#OhQkvpy~G@Y{&%q5!uti>zn(v+uA!UYZnuHRUE zzg?eh+s1s7rURB^#vfSzdO>DZdXey&0B;J=cVxWl#-L0d^=8!FtQy9RSQD7}Q3R&N zYQ_R#X-<18Md-OkC5f$x-0kUaA5G)UL!W#T+8E3DU6S44bd6NW>rt&JW^f{d?C~=` z(6~ZO{Ni{ri2wyX+$q#T3iTOJA6qbi9Hk|+G}7Ob8U5m=ra#cr>E*wU!5EdoE8QY< zs8^R{hJw|_5Fj)D2k4L{`NOrOcY8Z(?`b@8p@roBcTc}N`i-O;xu*(7X#(XMN?PJ7 z>G<1Ybkq2Q%~LOVV_;v8GW1uf|JkcS;U62UuWIbWbq!C zpU59jbGHU%j)#7=F8r6(59^QeU`L6Q@RR zRNHw-X4PnFzo*N>d#}yc;7)4AG$C^7WvPYfGzk1<@IR`lFN>()nz zI2%*|x<#HiC2RYj#jf7R*%@(NKB9ZhQCVKg_G5qU{tz3t!}dg{2U4q&Jhis9*@R>= z7UGk+zkO9)Sx)a>@QEo=KInnH0nCX)tIJ#IzIOmztzqTEc0lBPZN~eO>Te3L>NIuH zbP<7;l*80c%f}?8;1x<+upBc&t)@H1!PM#s!^t&MTz_VBJN=sY zULrRhZi7tKUZo9OOC`Kh=vLvVt6%H}k9FYL02D$7bEM;!<}-XM1r$(wBTTDp!5_LM z-FIOu5u~}zpu`+ftGA+r1fIZ3ExCG;{I{7^(yINxmVItvzUCuJ_b5ea`g-eH^rLbv zWL~U>87Ivz`9qB~Qch9-Pa<4RZ-qeWS6L6M?g^_F z3B;EC~jBZcX7y2pGVN_Fby?cukdTpN9D^tUEmf?LKwFtjO*-Zx1&{2Uoa7mgW z9qH7>gZE+WQSMAkQyAnSw*GMVtMMya#mk+rJv2;C(g0R+L=Y#-`WoP~$tvJC7R^l# zJ|AOo!-j=VswKCxkI$%0i(A0I-m%;8HgesnAzrD4s`__sVSi)Gh+9u0>4?OUw+Tx0 zpZR@E9d$rnv225xj*4%D%!!3#>hD99*#{U)1RfCfZUt``KW{lwmwsZSb;=<<^5>?i z3VK&loaXem1Bu=vdoX&j>;sxNds!ioI#gNda58fIS!{AS1M-V)S#oKyO9&xXofpf84Q%wTMUwM3(E^I>Ax|}RzHxYEEMdrPuuMCd#ZUE2NtdWHk(}V zLwQ$5hItO@@b3Oehf7)4N$?ru883U`W5c6Q87nTWKmPzoq~A-;aWpuYxy0c@q@VJ| z)aK5n!NrKJXY%5E_H?E{%r?toiRm{vVF`}DpsX2l((98DjD9*9p#Z*N8`&91kB_DSo79@ zGdtm#ulW^BhYkMj6eZkkBfMp$e+{!l%}%|Q?HJe=CFTkR_366DP%A)#-7@WXlB5cP zdia(f78qZX)L&gH$<6|RB44m>to2^Pj<1s6lMX7@m_sYQZ`Ds8Y>{2P{41mjV%B2 z$;&qnZS|{#Xl1bO7Bm?LNDE__Xe?AG3Y}98-qXM1U~V!rBrl30&S_`wQ zNaFFUbyhaNge)r-JEkIdjKWzi+1BIssXAIrXfIzTbIJU%q|jb=>*?|P-a2DxsNSf` zD+d$|%WBYKe(Jd7lOij0Pw12PPIS4eK--DnJ>Htf9WttZ!abL%tU{}LVE8(WJ#Z;l zU^)~R397zv_x(F^l>tb<@Z|A;;SIT$UBG0jWZ_%V!{f2+JSuRZF|1BegM~0`%EZ{Y zX}orMuX3)tGEj^F_%Q>?VNY6dG(_A=ee}W_&od974L;4sxUC?Zq0-5cu8Z;23d1Ye zahINCwpS`r@{m!7G>A%}g*~ldD;-LPokyG%{$bNbzeK$*LN9BuRKWOcG%CcZuej;w zJf!E8q_=zY{`{J;L88#i0mp}r6h(GiU>1_4HhOS4eqtw_%g*Q5E-a|%AS6#gtqk_` zrZU#mvpt3&X65w)PG&5SU&Fb~i6_-QXzWkQZrxG$h@Z^d9DXdU`zzjN>72|RkUrdM z=(2Io9j6b)Xt=@HYTo`ZwJtNqG9G#o&Rs;<0jK*#dKydBME=&HBih7tL0|cFR=@Uf zaU&{USGgq&bC&mBe)MP0K|efwVeqVP{H}&fvk0GM#r3{ zBD-P(*z}@~sxBZOA$%_lHT(K*_v_=b6MSuk%xm|IQSb!?)vIAw!!^i$PgbN=soeTQ zY*g#e6>|NqvZ#O%T?rkUsMsPiKtd1*iR;J#%4cq*|AC|(yEg{5ovNl!tt*v3@AtG0 z5+P*Vps@D*7Adw=J477yDUa8>u>+IkIn*}k^6B5;QnbrhYp}d^=+xGU+h0H}h`z>K zdHra&H>!0?UAZ{GeXb3cmtnnqXTT!h2^(-=!ovA(C-gWX8$Rio5xS*$C9iQuzB0En zFTEFdQKWb3NteM_E^x#}YRx1YZ=Ewkw$5C|9o3MLbw tAqBFNk${-qiM*&jO8$90z~g)<@tU*^(xTZ21kp^jSRbuoqy_>2{{n1no+SVP literal 0 HcmV?d00001 diff --git a/private/AM_Push_Sandbox.p12 b/private/AM_Push_Sandbox.p12 new file mode 100755 index 0000000000000000000000000000000000000000..8ffa0c800be27d096b505efaa6cd3c473367fbf8 GIT binary patch literal 3507 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 literal 0 HcmV?d00001 diff --git a/private/AuthKey_ZJ9G89X363.p8 b/private/AuthKey_ZJ9G89X363.p8 new file mode 100755 index 0000000..6d2ea4c --- /dev/null +++ b/private/AuthKey_ZJ9G89X363.p8 @@ -0,0 +1,6 @@ +-----BEGIN PRIVATE KEY----- +MIGTAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBHkwdwIBAQQg6emrDnIcwTOK1ukR +XP46LlSNM/isjoaaG78or+rl+iegCgYIKoZIzj0DAQehRANCAAQGw7HGRWmnAFPA +KUtVd8JTJp5ghjm6yV0EHmcbG7peM30MvirvBekankhkIFKQftqjsV7CY+MLKvmP +MBpKlcai +-----END PRIVATE KEY----- \ No newline at end of file diff --git a/private/appleKeys.json b/private/appleKeys.json new file mode 100755 index 0000000..588f879 --- /dev/null +++ b/private/appleKeys.json @@ -0,0 +1,3 @@ +{ + "Password" :"ZJ9G89X363" +} diff --git a/private/dbSetting.json b/private/dbSetting.json new file mode 100755 index 0000000..a74eb5a --- /dev/null +++ b/private/dbSetting.json @@ -0,0 +1,5 @@ +{ + "ConnectionStrings": { + "MariaDbConnection": "server=ipstein.myds.me;port=8003;database=AcaMate;user=root;password=AcaMaterootPW;" + } +} \ No newline at end of file diff --git a/private/jwtSetting.Development.json b/private/jwtSetting.Development.json new file mode 100755 index 0000000..3af0d78 --- /dev/null +++ b/private/jwtSetting.Development.json @@ -0,0 +1,11 @@ +{ + "JwtSettings": { + "SecretKey": "YourSuperSecretKeyThatIsLongEnough123!", + "Issuer": "AcaMate", + "Audience": "https:/devacamate.ipstein.myds.me", + "ExpiryMinutes": 10, + "ClockSkewMinutes": 5, + "RefreshTokenExpiryDays": 7 + } +} +// SecretKey 의 길이는 최소 256bit(32byte)는 넘어야 함 \ No newline at end of file diff --git a/private/jwtSetting.json b/private/jwtSetting.json new file mode 100755 index 0000000..ebc7ca1 --- /dev/null +++ b/private/jwtSetting.json @@ -0,0 +1,11 @@ +{ + "JwtSettings": { + "SecretKey": "YourSuperSecretKeyThatIsLongEnough123!", + "Issuer": "AcaMate", + "Audience": "https://acamate.ipstein.myds.me", + "ExpiryMinutes": 10, + "ClockSkewMinutes": 5, + "RefreshTokenExpiryDays": 7 + } +} +// SecretKey 의 길이는 최소 256bit(32byte)는 넘어야 함 \ No newline at end of file