From 2b32bb2b9681b1bf58412a57beb57d30fabb185a Mon Sep 17 00:00:00 2001 From: Craig Scott Date: Thu, 10 Jan 2019 00:16:17 -0800 Subject: [PATCH] Added login --- .DS_Store | Bin 6148 -> 6148 bytes .../xcschemes/Alamofire 2.xcscheme | 80 ++++ .../xcschemes/xcschememanagement.plist | 13 +- Stocks.io.xcodeproj/project.pbxproj | 20 + .../xcschemes/xcschememanagement.plist | 2 +- .../UserInterfaceState.xcuserstate | Bin 64954 -> 67964 bytes .../xcdebugger/Breakpoints_v2.xcbkptlist | 38 +- Stocks.io/.DS_Store | Bin 6148 -> 6148 bytes Stocks.io/Assets.xcassets/.DS_Store | Bin 6148 -> 6148 bytes .../backIcon.imageset/Contents.json | 2 +- .../backIcon.imageset/backButton.png | Bin 1343 -> 0 bytes .../backIcon.imageset/backIcon.png | Bin 0 -> 946 bytes Stocks.io/Base.lproj/Main.storyboard | 390 +++++++++++++++++- .../Controller/LoginViewController.swift | 92 ++++- .../Controller/RegisterViewController.swift | 103 ++++- Stocks.io/Extras/Constants.swift | 5 + Stocks.io/Extras/Utilities.swift | 17 +- Stocks.io/Model/Profile.swift | 19 + Stocks.io/Views/LoginTextField.swift | 4 + Stocks.io/Views/RoundedButton.swift | 10 + 20 files changed, 753 insertions(+), 42 deletions(-) create mode 100644 Pods/Pods.xcodeproj/xcshareddata/xcschemes/Alamofire 2.xcscheme delete mode 100644 Stocks.io/Assets.xcassets/backIcon.imageset/backButton.png create mode 100644 Stocks.io/Assets.xcassets/backIcon.imageset/backIcon.png create mode 100644 Stocks.io/Model/Profile.swift diff --git a/.DS_Store b/.DS_Store index 01a802c8fd5afcc252557b860dd38bceb857fe2e..9e083c6009d3c889fd76217fb7c42e7b0182aa89 100644 GIT binary patch delta 18 ZcmZoMXffDe&&tR+S&>z2a~SJ7ApkM#1pEL1 delta 16 XcmZoMXffDe&pO$ZMSOD@>pCF-ExZK| diff --git a/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Alamofire 2.xcscheme b/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Alamofire 2.xcscheme new file mode 100644 index 0000000..d594691 --- /dev/null +++ b/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Alamofire 2.xcscheme @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Pods/Pods.xcodeproj/xcuserdata/craigscott.xcuserdatad/xcschemes/xcschememanagement.plist b/Pods/Pods.xcodeproj/xcuserdata/craigscott.xcuserdatad/xcschemes/xcschememanagement.plist index 313ec7b..242a92b 100644 --- a/Pods/Pods.xcodeproj/xcuserdata/craigscott.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/Pods/Pods.xcodeproj/xcuserdata/craigscott.xcuserdatad/xcschemes/xcschememanagement.plist @@ -4,6 +4,11 @@ SchemeUserState + Alamofire 2.xcscheme_^#shared#^_ + + orderHint + 7 + Alamofire.xcscheme isShown @@ -41,6 +46,12 @@ SuppressBuildableAutocreation - + + E76458C58C9140B6A16D60547E68E80C + + primary + + + diff --git a/Stocks.io.xcodeproj/project.pbxproj b/Stocks.io.xcodeproj/project.pbxproj index a4b0b3a..16049df 100644 --- a/Stocks.io.xcodeproj/project.pbxproj +++ b/Stocks.io.xcodeproj/project.pbxproj @@ -17,6 +17,11 @@ E12C9BEA215C538B00CB8493 /* Charts.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = E12C9BE8215C538B00CB8493 /* Charts.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; E13F2A0A218E5EB500F0B15D /* companiesnasdaq.json in Resources */ = {isa = PBXBuildFile; fileRef = E13F2A09218E5EB400F0B15D /* companiesnasdaq.json */; }; E1587269218F643500D50581 /* SearchTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1587268218F643500D50581 /* SearchTableViewCell.swift */; }; + E15901AE21E015BE006CE67C /* LoginViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E15901AD21E015BE006CE67C /* LoginViewController.swift */; }; + E15901B021E01C2E006CE67C /* LoginTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = E15901AF21E01C2E006CE67C /* LoginTextField.swift */; }; + E15901B221E0FEEC006CE67C /* RoundedButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = E15901B121E0FEEC006CE67C /* RoundedButton.swift */; }; + E15901B421E119F5006CE67C /* RegisterViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E15901B321E119F5006CE67C /* RegisterViewController.swift */; }; + E15901B721E1ADE5006CE67C /* Profile.swift in Sources */ = {isa = PBXBuildFile; fileRef = E15901B621E1ADE5006CE67C /* Profile.swift */; }; E1BF5E5E215EDB6300C7BC40 /* newsData.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1BF5E5D215EDB6300C7BC40 /* newsData.swift */; }; E1BF5E60215EDB7000C7BC40 /* financialData.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1BF5E5F215EDB7000C7BC40 /* financialData.swift */; }; E1BF5E66215F33CE00C7BC40 /* StockCellTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1BF5E65215F33CE00C7BC40 /* StockCellTableViewCell.swift */; }; @@ -56,6 +61,11 @@ E12C9BE8215C538B00CB8493 /* Charts.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Charts.framework; sourceTree = BUILT_PRODUCTS_DIR; }; E13F2A09218E5EB400F0B15D /* companiesnasdaq.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = companiesnasdaq.json; path = Stocks.io/Controller/companiesnasdaq.json; sourceTree = SOURCE_ROOT; }; E1587268218F643500D50581 /* SearchTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchTableViewCell.swift; sourceTree = ""; }; + E15901AD21E015BE006CE67C /* LoginViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginViewController.swift; sourceTree = ""; }; + E15901AF21E01C2E006CE67C /* LoginTextField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginTextField.swift; sourceTree = ""; }; + E15901B121E0FEEC006CE67C /* RoundedButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoundedButton.swift; sourceTree = ""; }; + E15901B321E119F5006CE67C /* RegisterViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RegisterViewController.swift; sourceTree = ""; }; + E15901B621E1ADE5006CE67C /* Profile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Profile.swift; sourceTree = ""; }; E1BF5E5D215EDB6300C7BC40 /* newsData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = newsData.swift; sourceTree = ""; }; E1BF5E5F215EDB7000C7BC40 /* financialData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = financialData.swift; sourceTree = ""; }; E1BF5E65215F33CE00C7BC40 /* StockCellTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StockCellTableViewCell.swift; sourceTree = ""; }; @@ -162,6 +172,8 @@ E1D3BE35215B600000B42453 /* RoundedView.swift */, E1BF5E65215F33CE00C7BC40 /* StockCellTableViewCell.swift */, E1587268218F643500D50581 /* SearchTableViewCell.swift */, + E15901AF21E01C2E006CE67C /* LoginTextField.swift */, + E15901B121E0FEEC006CE67C /* RoundedButton.swift */, ); path = Views; sourceTree = ""; @@ -173,6 +185,7 @@ E1BF5E5D215EDB6300C7BC40 /* newsData.swift */, E1BF5E5F215EDB7000C7BC40 /* financialData.swift */, E1E19B5B21601FC5007F0376 /* BarChartFormatter.swift */, + E15901B621E1ADE5006CE67C /* Profile.swift */, ); path = Model; sourceTree = ""; @@ -182,6 +195,8 @@ children = ( E1D3BE1E215B59BE00B42453 /* MainViewController.swift */, E1060C512188B4530081BF74 /* SearchViewController.swift */, + E15901AD21E015BE006CE67C /* LoginViewController.swift */, + E15901B321E119F5006CE67C /* RegisterViewController.swift */, ); path = Controller; sourceTree = ""; @@ -308,17 +323,22 @@ buildActionMask = 2147483647; files = ( E1060C522188B4530081BF74 /* SearchViewController.swift in Sources */, + E15901B021E01C2E006CE67C /* LoginTextField.swift in Sources */, E1D3BE1F215B59BE00B42453 /* MainViewController.swift in Sources */, E1D3BE1D215B59BE00B42453 /* AppDelegate.swift in Sources */, + E15901AE21E015BE006CE67C /* LoginViewController.swift in Sources */, E1BF5E5E215EDB6300C7BC40 /* newsData.swift in Sources */, E10AC593215BF7B900E96B1F /* Utilities.swift in Sources */, E1E19B5C21601FC5007F0376 /* BarChartFormatter.swift in Sources */, E1039DBF2163D921003FCBBE /* GIF.swift in Sources */, + E15901B421E119F5006CE67C /* RegisterViewController.swift in Sources */, E1BF5E60215EDB7000C7BC40 /* financialData.swift in Sources */, E1D3BE36215B600000B42453 /* RoundedView.swift in Sources */, + E15901B221E0FEEC006CE67C /* RoundedButton.swift in Sources */, E10AC58E215BF09F00E96B1F /* Stock.swift in Sources */, E1D3BE38215B613300B42453 /* Extensions.swift in Sources */, E10AC591215BF27B00E96B1F /* Constants.swift in Sources */, + E15901B721E1ADE5006CE67C /* Profile.swift in Sources */, E1BF5E66215F33CE00C7BC40 /* StockCellTableViewCell.swift in Sources */, E1587269218F643500D50581 /* SearchTableViewCell.swift in Sources */, ); diff --git a/Stocks.io.xcodeproj/xcuserdata/craigscott.xcuserdatad/xcschemes/xcschememanagement.plist b/Stocks.io.xcodeproj/xcuserdata/craigscott.xcuserdatad/xcschemes/xcschememanagement.plist index cb6b95f..46f93a3 100644 --- a/Stocks.io.xcodeproj/xcuserdata/craigscott.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/Stocks.io.xcodeproj/xcuserdata/craigscott.xcuserdatad/xcschemes/xcschememanagement.plist @@ -7,7 +7,7 @@ Stocks.io.xcscheme orderHint - 7 + 8 diff --git a/Stocks.io.xcworkspace/xcuserdata/craigscott.xcuserdatad/UserInterfaceState.xcuserstate b/Stocks.io.xcworkspace/xcuserdata/craigscott.xcuserdatad/UserInterfaceState.xcuserstate index e5c1c9d88fe0a378bb775c931ef9b92a693bdea0..99b04b5b0e571375770365100c29a65c3b391ded 100644 GIT binary patch delta 35952 zcmbTf2YeMp7x2Bav+dr!WlK7p&>P$CkExQIcbNO@9$ zR3$Y@Ez*{>Bkf5C(vfr`okV2;X~J{?gayJPVX5$}uv%Cnyd?HOOdy4(VA!4RDN*pat5c9E)W-sE5ude8nHy& zAZ`@5iaW)<;sNn>@h$O~ct*S+ej;8LzY=eV--)-yU&W%|#d{JbMM#lSloTz+NM)q5 zQaP!-R6%MaB}vE0>YW%H`zpas@e7 zt|ix&>&Ok{B)Os7T5cn^mD|bf<<4?1d5}C<9wm>J$H}>Jo?IwTl&8wmSB|?c*qLgT*oKjw?ti&pHl>{YGsi)Le8YoSarb-v3 ztI|#BuJllPD!r86N*`r_GEf<+3{&1x-YZhxS3XouC})(j%16pYJS`?!{Kl{JPyNQIwBoWj{t9g`fB9n&2%9F_wd^Bhk&o^m|xSnOEhSnhb%@w{V|V~yh_$2y14vB|O7vEA{q zW4B|E;|<4~jw6nvj<+1|IZirGIZiu1c6{Ra)N#Y{wd1Da8^Q2LHIwOmm<((Cr)txn*HJwS$hR#OLWM^Y%b7xy;J7;@mcV`c0Pv=nQ zFz0Y*s&j-h!#U2G?JRUobWU>4cFu9mb;e5)u)cL$~mGcGXM&~ByX6F{?R_6}q zKIeYt8_qYKN1P{|C!MF9r=4e<7o3-zmz`IfSDjxwZ#utm-f#6nCmTHRHN^PySQ9G#J)gEe3wU;_b9jp#f zN2_DhEOo3pPR&&(sgu{?B>S}e3`jWa<-K1_-x2XHn{pzdg zYenh-^>y_f^ry@KdC>fzo@^echuipyou2HVh zt}(7c*F@JO*JRfe*9_Mj*Id^;SJ4x$XIzV2OI$CyR=d`?UUIE<`CMCF+g#gSFT3`+ z_Pbtnz3qC(^{(qZ*ZZyyUFTe%xh}abyS{PVa((Oi&h@?PC)e+;KU{yh{&G{d;1=Dw z+i;uiFn72++Fj9I$z9W3%U#>u$erwN>~7+2>Tc<7@9ysI;qK`k>K^7EUgS=7k8o$W z$GHpKh3<)NaL;znanE(nb1!f&aX;sN-o4(v!M)MF$-UXV-TjJtuX~^Sb@vpvB{j>WQ_pk0d?%&*hdWgs2ae7owq$kP~?TPV}@l^0s z^HlfL@YM7qdg^)Vd)j%5+Iu>9I(j;JI(xc!x_bJ0`g!_$26zT~GCY}{QJ&GBF`jHs zfv3H#}c^e)Qb-{N%as`P=i4m-7;@=yer&-CmD3!W-$0@>cOy z^;Yv%_tx;%@z(b?@Fsbids}#0db@bLdb@eMdwY2Mcn5n°lb-aPLFZ@#y{Tj-tQ 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 DwdHZr delta 33468 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 Z{Qng#XUzDYFF*G`|9_qH|8isD{{b>d_gnw~ diff --git a/Stocks.io.xcworkspace/xcuserdata/craigscott.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/Stocks.io.xcworkspace/xcuserdata/craigscott.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist index e176f42..69d6f23 100644 --- a/Stocks.io.xcworkspace/xcuserdata/craigscott.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ b/Stocks.io.xcworkspace/xcuserdata/craigscott.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -10,7 +10,7 @@ ignoreCount = "0" continueAfterRunningActions = "No" filePath = "Stocks.io/Controller/MainViewController.swift" - timestampString = "563835743.469505" + timestampString = "568437911.638719" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" startingLineNumber = "72" @@ -26,7 +26,7 @@ ignoreCount = "0" continueAfterRunningActions = "No" filePath = "Stocks.io/Controller/MainViewController.swift" - timestampString = "563835743.471069" + timestampString = "568437911.6387939" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" startingLineNumber = "277" @@ -90,7 +90,7 @@ ignoreCount = "0" continueAfterRunningActions = "No" filePath = "Stocks.io/Controller/MainViewController.swift" - timestampString = "563835743.471413" + timestampString = "568437911.638883" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" startingLineNumber = "115" @@ -250,7 +250,7 @@ ignoreCount = "0" continueAfterRunningActions = "No" filePath = "Stocks.io/Controller/MainViewController.swift" - timestampString = "563835743.471688" + timestampString = "568437911.639025" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" startingLineNumber = "104" @@ -298,7 +298,7 @@ ignoreCount = "0" continueAfterRunningActions = "No" filePath = "Stocks.io/Controller/MainViewController.swift" - timestampString = "563835743.471792" + timestampString = "568437911.63908" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" startingLineNumber = "105" @@ -314,7 +314,7 @@ ignoreCount = "0" continueAfterRunningActions = "No" filePath = "Stocks.io/Controller/MainViewController.swift" - timestampString = "563835743.471908" + timestampString = "568437911.639133" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" startingLineNumber = "106" @@ -330,7 +330,7 @@ ignoreCount = "0" continueAfterRunningActions = "No" filePath = "Stocks.io/Controller/SearchViewController.swift" - timestampString = "563835743.472057" + timestampString = "568701121.9309601" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" startingLineNumber = "43" @@ -408,7 +408,7 @@ ignoreCount = "0" continueAfterRunningActions = "No" filePath = "Stocks.io/Extras/Utilities.swift" - timestampString = "563496543.210952" + timestampString = "568800556.388193" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" startingLineNumber = "23" @@ -424,7 +424,7 @@ ignoreCount = "0" continueAfterRunningActions = "No" filePath = "Stocks.io/Extras/Utilities.swift" - timestampString = "563496543.211043" + timestampString = "568800556.388262" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" startingLineNumber = "20" @@ -436,11 +436,11 @@ + + + + diff --git a/Stocks.io/.DS_Store b/Stocks.io/.DS_Store index 219ce93f7ff282f3bba74570712007dfe17b9bb0..c69114aa484229c434147dfdf99760c96fc65777 100644 GIT binary patch delta 389 zcmZoMXfc=|#>B!ku~2NHo+2a1#DLw44=^$_a!lr7RH{!ZFD^*R$xmWnVECF;kds+l zVqkECk%^gwm5rT)lZ%^^n~$3_HaH`{Jh&vWq_o&6u_#_ZCO9)CH7T(uJTs*vBP2D? zH7B(!HP64uC$S{8C>o?VBtJg~r~txFObW|PEsqxvan8>xNzBYkEdrYdGNV4RC?-5J zFD1X+DZex?r5LOMYC4!5kXVudG>AjlA*KQ7Mg|5>4$gQ1iRx-&V^bXkV-u5F9ffLh za|0a(6JxX5T22lQNp-iNxYDM+S+kccUAFwtVX!U+Mn(wDAPA))6f*B`mu~2NHo+2ab#DLw5tdsRw^(J?-+A%UrKEk diff --git a/Stocks.io/Assets.xcassets/.DS_Store b/Stocks.io/Assets.xcassets/.DS_Store index d19b531e61a314314a8e1b3ac90f547de07450c9..26b71384c44e9c39813a3446e86986d3785e1898 100644 GIT binary patch delta 94 zcmZoMXfc@JFUrEez`)4BAi%)j$&k#D&ydHU$B;RBA>(pmkc=Qh51ONa4 delta 47 zcmZoMXfc@JFUrioz`)4BAi%(&$B@a8%aF*B&X79!BI9yK=FN7DC)p-87;R?f_{$Ff D=+z5^ diff --git a/Stocks.io/Assets.xcassets/backIcon.imageset/Contents.json b/Stocks.io/Assets.xcassets/backIcon.imageset/Contents.json index b7fb066..0833df1 100644 --- a/Stocks.io/Assets.xcassets/backIcon.imageset/Contents.json +++ b/Stocks.io/Assets.xcassets/backIcon.imageset/Contents.json @@ -2,7 +2,7 @@ "images" : [ { "idiom" : "universal", - "filename" : "backButton.png", + "filename" : "backIcon.png", "scale" : "1x" }, { diff --git a/Stocks.io/Assets.xcassets/backIcon.imageset/backButton.png b/Stocks.io/Assets.xcassets/backIcon.imageset/backButton.png deleted file mode 100644 index 4c1021f2288b12ea3511546311d9195ee31ab225..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1343 zcmV-F1;F}=P)Px(`AI}URA>dwnpO-{@t3HIF z6)|a8b9*)SlDsLz3n?P%LoI?7+oF~>_z>(vB}T{wY9Y;06KyH{a!VAh&6o9@euEgj*ecSobjsR z3B0GLCsI>Wlc3|5WJJAo=3;-H2Y7vCWaO-u2T%p~_4oI8FeQc&kGKF7T77waef{M4 z`1p4!Lfe7^9A7eL?c=Db_=^m$)28a>e1*m!nfVL?`=Ey)p_k-i(tO9<@N zeBJ`$P_aK84z~dRG4NYf9lzZ{<}}meGobg`+e&bMG!~1EIrVD?hu3!o!#kafOH_A? z!8~m5dlNVY9e@{O^{{ie-pfdm-j+?zYLo+)DT2X>wXs~vaP4EKmOUhwa^TGC*Dwg@ zTFS4`kw_$BCYAx7eGMng%5uCisDaAL%083L01t&i&r-3+tSr|n@W;Elx^5Ld1Dr$C z^991X?r;U_+TCmF>gt}BO23?^d6ENm3)Oob`d@5cQME7Bj{cq$jUa!N2X(~+n*3NQ zmHI0flw(Fw(!-sdot1t@JFe563C%hBs*b;|54?LLk;pv)-r`lHRL~|TA0EwqAnr0N zRIa6l7DlFblT6H8RDi`spqbB)kByCOnjXA0`G&lvs^eydemz=EZta%(`k>4iOGUn7 z8sS4gU$GnU!TS?+a(*u;4Gav(Iq6dck&uk|23ciEkiUmx*b4Zj^D#SbZFP0EoZ$;i zDx)oZWCZvhvauUUO}+&9i;POe@bIu44|4ETRaH%VYJHv0cPHE6xG6j54KJcu_&4y` z_Cwo?t`}RT?24=^KYDQz+fu^|v&`FXyn>e+o^^aa2>lh{b=b|37vDFv1T>uB{e_k7 zx8T~^+APOf2|$K4bPRaJJZ)k+{aAc1N!dR&H6@$JCzb}!Mc&w>o}Dxu7^Dxx)i{r{ z8_sCz6x;1r4t2%`Xn?cx$?#tMyTnq^9o^NPqXa!z=K`TiDI7L1R z^hGBCM{tQpx3;#P#j8>$rUgA-w}l zK0N2P6_)11K+DgFu1N`opH+_V+TMbFSA+fZae-gnUYMAeSaBuJHYkCMZC_vCZG2rz z7+PZJu5T)<>*)gUGNXKo9sDCzM`dtRP(r=T{eC(-&I44N^*UEH7V$g1yuAF5b#qbC z@(gZ@5_7C4?Dh=zN63$mRinK>1N=D$yZ5tUj@-AasjYI=2Dgg0x3>r5@%X*G?q=RX zj437mfFSW2i6Hz<-3s?VB$LVc$;rvzt-iYD{{g4Gz@6~=S{48R002ovPDHLkV1gnw BnJ54N diff --git a/Stocks.io/Assets.xcassets/backIcon.imageset/backIcon.png b/Stocks.io/Assets.xcassets/backIcon.imageset/backIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..89db739b46d17611a62659e4e89fb130c50ccab8 GIT binary patch literal 946 zcmV;j15NyiP)Px&Y)M2xRA>dwnaxWTQ5c8s)jlk$TUyYnO`0auB3eZsw1~c-50Hw8+N6XM(W2-t zC<52^MbRdLq=i%vwJSb!J}p&CEIXec$uk zmvd*%oSROCv|KK?iWJ+?CbS0CqD5#innYPNgx;eb^bEaBr_-aHqcvbF(HYc@Tx^t} zJ7^b5&pJJWEJv477M03glc)ie{tGB6YDB|mwycxHYfDyrl2xIHC<+^6kfzY^B&kE6 zqae;3<0kDnPG5k)jp%z`!YG>$7;Ii3cmnFtP?VGf#=1v;xfMK)n$!IS62;NoS`-{A z-94iEA=(yU3deo<@H6h6I5gsLJ>Mw-?O_<|c-sCjEM?{b=qj!+nRdd?E8w~4XPO45 z^E?uKQtc$gtub&OI31OAG@H(Zo^^M*VAxE>kI|tOUDE9+MP4dM1AZbT@l?oo+wck; z56QWVZ=m(`1~nY*H*u#OV_m`yC`ju8y#%8A~ys)P_mO-zFM~Bzte%Rq2 z8aVQ;6{BM%aooY4DkLi0c_vHq_+Y=1`6}B3{$HizWuIu}# zQx^%fa|T*`(-l{Ps%w8*t30hel4MVS-suPOS3Jds@A&Yn-ys3lT9O>M;-K<3P!df4 z71=MPaV|$4F_TX){y&?YMJrFxeAFHjy#7)-SQN651Hr0%E7DePR5rjsTM97+>L<~D z6vaOjj~QoWAh=@ABwU8BBF(*0+cy#(F2)e*a|WnEx6n8WYkeeWK^38(f&?>I1~s8a zXaw2XM;x!At!TyrFv$4Mf&M`N(7Jv-szus-*EX5 - - + + @@ -26,7 +26,7 @@ - + @@ -37,17 +37,17 @@ - + - + - + @@ -275,7 +275,7 @@ - + - + @@ -356,7 +356,7 @@ @@ -450,7 +450,7 @@ - + @@ -466,11 +466,11 @@ - + - + @@ -480,14 +480,14 @@ - + - + - + - + @@ -561,12 +561,360 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Stocks.io/Controller/LoginViewController.swift b/Stocks.io/Controller/LoginViewController.swift index 9d4c585..dd945f0 100644 --- a/Stocks.io/Controller/LoginViewController.swift +++ b/Stocks.io/Controller/LoginViewController.swift @@ -7,16 +7,65 @@ // import UIKit +import Alamofire -class LoginViewController: UIViewController { - +class LoginViewController: UIViewController , UINavigationControllerDelegate{ + private var user_profile : Profile = Profile(first_name: "", last_name: "", email: "", Token: "", Stocks: []) + @IBOutlet weak var LoginContainer: RoundedView! + @IBOutlet weak var email_textfield: LoginTextField! + + @IBOutlet weak var password_textfield: LoginTextField! + @IBOutlet weak var login_activity: UIActivityIndicatorView! + override func viewDidLoad() { super.viewDidLoad() - + login_activity.hidesWhenStopped = true + NotificationCenter.default.addObserver( + self, + selector: #selector(keyboardWillShow), + name: NSNotification.Name.UIKeyboardWillShow, + object: nil + ) + + NotificationCenter.default.addObserver( + self, + selector: #selector(keyboardWillHide), + name: NSNotification.Name.UIKeyboardWillHide, + object: nil + ) + setupHideKeyboardOnTap() + //LoginContainer.isHidden = false // Do any additional setup after loading the view. } + @objc func keyboardWillShow(notification: Notification) { + if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue { + if self.view.frame.origin.y == 0{ + self.view.frame.origin.y -= keyboardSize.height + } + } + + } + + @objc func keyboardWillHide(notification: Notification) { + if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue { + if self.view.frame.origin.y != 0{ + self.view.frame.origin.y = 0 + } + } + } + + override func awakeFromNib() { + } + + @IBAction func RegisterButton(_ sender: Any) { + LoginContainer.isHidden = true + performSegue(withIdentifier: "RegisterSegue", sender: self.navigationController) + //let sVC = self.storyboard?.instantiateViewController(withIdentifier: "Register") as! RegisterViewController + + //self.navigationController?.pushViewController(sVC, animated: true) + } /* // MARK: - Navigation @@ -26,5 +75,42 @@ class LoginViewController: UIViewController { // Pass the selected object to the new view controller. } */ + + //Auth-token login + @IBAction func login_auth_token(_ sender: Any) { + login_activity.startAnimating() + let body = [ + "username" : email_textfield.text, + "password" : password_textfield.text + ] + + Alamofire.request(backendConstants.deploymentURL + "users/token/", method: .post, parameters: body, + encoding: JSONEncoding.default) + .responseJSON { response in + self.login_activity.stopAnimating() + + guard response.result.error == nil else { + // got an error in getting the data, need to handle it + print("error calling POST on /todos/1") + print(response.result.error!) + return + } + // make sure we got some JSON since that's what we expect + guard let json = response.result.value as? [String: Any] else { + print("\(response.result.value)") + return + } + if let token = json["token"] as? String { + print(token) + self.user_profile.Token = token + self.performSegue(withIdentifier: "LoginSegue", sender: self.navigationController) + print("Success") + }else{ + print("Invalid Login Information") + } + + } + } + } diff --git a/Stocks.io/Controller/RegisterViewController.swift b/Stocks.io/Controller/RegisterViewController.swift index b868368..fb3206a 100644 --- a/Stocks.io/Controller/RegisterViewController.swift +++ b/Stocks.io/Controller/RegisterViewController.swift @@ -7,24 +7,121 @@ // import UIKit +import Alamofire class RegisterViewController: UIViewController { + @IBOutlet weak var first_name: LoginTextField! + + @IBOutlet weak var last_name: LoginTextField! + @IBOutlet weak var email: LoginTextField! + @IBOutlet weak var RegisterActivity: UIActivityIndicatorView! + @IBOutlet weak var password: LoginTextField! + @IBOutlet weak var password_verify: LoginTextField! + @IBAction func GoToLoginButton(_ sender: Any) { + + dismiss(animated: true, completion:nil) + if let login = self.presentingViewController as? LoginViewController{ + login.LoginContainer.isHidden = false + } + + /* + if let nav = self.navigationController{ + for vc in nav.viewControllers{ + if let login = vc as? LoginViewController{ + login.LoginContainer.isHidden = false + } + } + self.navigationController?.popToRootViewController(animated: true) + } + */ + + } + override func viewDidLoad() { super.viewDidLoad() + RegisterActivity.hidesWhenStopped = true + NotificationCenter.default.addObserver( + self, + selector: #selector(keyboardWillShow), + name: NSNotification.Name.UIKeyboardWillShow, + object: nil + ) + + NotificationCenter.default.addObserver( + self, + selector: #selector(keyboardWillHide), + name: NSNotification.Name.UIKeyboardWillHide, + object: nil + ) + + setupHideKeyboardOnTap() // Do any additional setup after loading the view. } - - /* + @objc func keyboardWillShow(notification: Notification) { + if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue { + if self.view.frame.origin.y == 0{ + self.view.frame.origin.y -= keyboardSize.height + } + } + + } + + @objc func keyboardWillHide(notification: Notification) { + if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue { + if self.view.frame.origin.y != 0{ + self.view.frame.origin.y = 0 + } + } + } + + @IBAction func Register(_ sender: Any) { + RegisterActivity.startAnimating() + + let body = [ + "username" : email.text, + "email" : email.text, + "password" : password.text, + "first_name" : first_name.text, + "last_name" : last_name.text + ] + + Alamofire.request(backendConstants.deploymentURL + "users/register/", method: .post, parameters: body, + encoding: JSONEncoding.default) + .responseJSON { response in + self.RegisterActivity.stopAnimating() + + guard response.result.error == nil else { + // got an error in getting the data, need to handle it + print("error calling POST on /todos/1") + print(response.result.error!) + return + } + // make sure we got some JSON since that's what we expect + guard let json = response.result.value as? [String: Any] else { + print("\(response.result.value)") + return + } + + + } + + } + + // MARK: - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + + if let login = segue.destination as? LoginViewController{ + login.LoginContainer.isHidden = false + } // Get the new view controller using segue.destination. // Pass the selected object to the new view controller. } - */ + } diff --git a/Stocks.io/Extras/Constants.swift b/Stocks.io/Extras/Constants.swift index b6f72d5..38505ce 100644 --- a/Stocks.io/Extras/Constants.swift +++ b/Stocks.io/Extras/Constants.swift @@ -57,3 +57,8 @@ struct timeInterval { static let hour = "60min" static let none = "" } + +struct backendConstants{ + static let testingURL = "https://localhost:8000/" + static let deploymentURL = "https://www.stocksio.ml/" +} diff --git a/Stocks.io/Extras/Utilities.swift b/Stocks.io/Extras/Utilities.swift index 017c011..0a92699 100644 --- a/Stocks.io/Extras/Utilities.swift +++ b/Stocks.io/Extras/Utilities.swift @@ -7,7 +7,7 @@ // import Foundation - +import UIKit class Utilities { static var sharedInstance = Utilities() static let calendar = Calendar.current @@ -27,3 +27,18 @@ class Utilities { } } + +extension UIViewController { + /// Call this once to dismiss open keyboards by tapping anywhere in the view controller + func setupHideKeyboardOnTap() { + self.view.addGestureRecognizer(self.endEditingRecognizer()) + self.navigationController?.navigationBar.addGestureRecognizer(self.endEditingRecognizer()) + } + + /// Dismisses the keyboard from self.view + private func endEditingRecognizer() -> UIGestureRecognizer { + let tap = UITapGestureRecognizer(target: self.view, action: #selector(self.view.endEditing(_:))) + tap.cancelsTouchesInView = false + return tap + } +} diff --git a/Stocks.io/Model/Profile.swift b/Stocks.io/Model/Profile.swift new file mode 100644 index 0000000..131d4a6 --- /dev/null +++ b/Stocks.io/Model/Profile.swift @@ -0,0 +1,19 @@ +// +// Profile.swift +// Stocks.io +// +// Created by Craig Scott on 1/5/19. +// Copyright © 2019 Craig Scott. All rights reserved. +// + +import Foundation + +struct Profile{ + + var first_name : String + var last_name : String + var email : String + var Token : String + var Stocks : [String] + +} diff --git a/Stocks.io/Views/LoginTextField.swift b/Stocks.io/Views/LoginTextField.swift index ee5af50..8e0617a 100644 --- a/Stocks.io/Views/LoginTextField.swift +++ b/Stocks.io/Views/LoginTextField.swift @@ -17,5 +17,9 @@ class LoginTextField: UITextField { // Drawing code } */ + override func awakeFromNib(){ + self.layer.borderWidth = 2.0 + self.layer.borderColor = UIColor.white.cgColor + } } diff --git a/Stocks.io/Views/RoundedButton.swift b/Stocks.io/Views/RoundedButton.swift index 4860030..37fd387 100644 --- a/Stocks.io/Views/RoundedButton.swift +++ b/Stocks.io/Views/RoundedButton.swift @@ -17,5 +17,15 @@ class RoundedButton: UIButton { // Drawing code } */ + + override func awakeFromNib() { + super.awakeFromNib() + //self.addBlurEffect() + self.layer.cornerRadius = 10 + self.layer.borderWidth = 2 + self.layer.borderColor = UIColor.white.cgColor + //self.layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner] + self.clipsToBounds = true + } }