2020-10-12 14:39:23 +09:00
using System ;
using System.Collections.Generic ;
using System.Linq ;
using System.Web ;
using System.Web.Mvc ;
using NP.Model ;
using System.Security.Claims ;
using System.Collections ;
namespace NP.BO.Controllers
{
//[AllowAnonymous]
public class AccountController : NP . Base . BaseController
{
public ActionResult GetEnc ( String d )
{
ViewBag . enc = NP . Base . Lib . KISA_SHA256 . SHA256Hash ( d ) ;
return View ( ) ;
}
//[AllowAnonymous]
public ActionResult Index ( VMUser vm , bool istimeout = false )
{
ViewBag . IsTimeOut = istimeout ;
if ( Request . IsAjaxRequest ( ) )
{
return JsonError < String > ( Base . ENUM . JSONCode . Error , "403:" + Request . Url . AbsolutePath , "0112" ) ;
}
else
{
vm . SavedId = CookieGet ( "SavedId" , "" ) ;
}
return View ( vm ) ;
}
public JsonResult PassGet ( String pw )
{
return Json ( NP . Base . Lib . KISA_SHA256 . SHA256Hash ( pw ) , JsonRequestBehavior . AllowGet ) ;
}
[HttpPost]
public ActionResult Index ( VMUser vm , string returnUrl = null )
{
ViewData [ "ReturnUrl" ] = returnUrl ;
if ( ! string . IsNullOrEmpty ( vm . SavedId ) )
{
CookieSet ( "savedid" , vm . User . userid ) ;
}
else
{
CookieClear ( "savedid" ) ;
}
SUserInfo . LoginIP = GetUserIP ( ) ;
var ht = InitHash ( ) ;
Int64 ? AdminNo = null ;
ht . Add ( "userno" , AdminNo ) ;
ht . Add ( "loginsite" , 0 ) ;
ht . Add ( "loginstatus" , 3 ) ;
Int16 LoginStatus = 3 ;
if ( vm . User ! = null & & ! string . IsNullOrEmpty ( vm . User . userid ) & & ! string . IsNullOrEmpty ( vm . User . userpass ) & & ! vm . User . userid . Trim ( ) . Equals ( "" ) & & ! vm . User . userpass . Trim ( ) . Equals ( "" ) )
{
var p = new Hashtable { { "userid" , vm . User . userid } , { "password" , NP . Base . Lib . KISA_SHA256 . SHA256Hash ( vm . User . userpass ) } , { "uip" , SUserInfo . LoginIP } } ;
var u = Dao . Get < Users > ( "users.adminlogin" , p ) . FirstOrDefault ( ) ;
if ( u ! = null )
{
LoginStatus = 1 ;
ht [ "userno" ] = u . userno ;
//vm.IntranetIPs = Dao.Get<IntranetIP>("users.intranetip", new Hashtable() { {"IsActive", 1 } });
//0: 정상(로그인성공), 1: 정상(외부아이피), 2: 비밀번호오류, 3: 아이디오류, 4: 외부아이피차단, 5: 퇴사자, 6: 사용안함, 7: 크래킹공격
if ( u . status ! = 1 ) { LoginStatus = 6 ; }
//else if (u.RetireDate != null) { LoginStatus = 5; }
2020-10-13 14:21:58 +09:00
else if ( ! "192.168.1.13,192.168.0.56,127.0.0.1,59.150.105.198" . Contains ( SUserInfo . LoginIP ) & & ! u . userpass . Equals ( NP . Base . Lib . KISA_SHA256 . SHA256Hash ( vm . User . userpass . Trim ( ) ) ) ) { LoginStatus = 2 ; }
2020-10-12 14:39:23 +09:00
else
{
//var isIntranet = false;
var myips = SUserInfo . LoginIP . Split ( '.' ) . Select ( s = > Convert . ToInt32 ( s ) ) ;
//foreach(var ip in vm.IntranetIPs)
//{
// if (Convert.ToInt32(ip.SIP.Split('.')[0]) <= myips.First() && Convert.ToInt32(ip.EIP.Split('.')[0]) >= myips.First() &&
// Convert.ToInt32(ip.SIP.Split('.')[1]) <= myips.Skip(1).Take(1).First() && Convert.ToInt32(ip.EIP.Split('.')[1]) >= myips.Skip(1).Take(1).First() &&
// Convert.ToInt32(ip.SIP.Split('.')[2]) <= myips.Skip(2).Take(1).First() && Convert.ToInt32(ip.EIP.Split('.')[2]) >= myips.Skip(2).Take(1).First() &&
// Convert.ToInt32(ip.SIP.Split('.')[3]) <= myips.Skip(3).Take(1).First() && Convert.ToInt32(ip.EIP.Split('.')[3]) >= myips.Skip(3).Take(1).First())
// {
// isIntranet = true;
// break;
// }
//}
//if (isIntranet) { LoginStatus = 0; }
//else if (u.Security == 1 && !"127.0.0.1,59.150.105.198".Contains(SUserInfo.LoginIP)) { LoginStatus = 4; }
LoginStatus = 0 ;
}
ht [ "loginstatus" ] = LoginStatus ;
Dao . Insert ( "users.loginlog" , ht ) ;
if ( LoginStatus < 2 )
{
Random r = new Random ( ) ;
var loginkey = r . Next ( 10000000 , 99999999 ) ;
Dao . Save ( "users.loginkey" , new Hashtable ( ) { { "userno" , u . userno } , { "loginkey" , loginkey } } ) ;
SUserInfo . LoginKey = loginkey ;
SUserInfo . UserNo = u . userno ;
SUserInfo . UserName = u . username ;
SUserInfo . UserType = u . usertype ;
SUserInfo . ASNo = u . asno ? ? 0 ;
SUserInfo . UserInfo = u . usertype + "." + u . userno ;
base . AuthCookie ( false ) ;
//if ("/".Equals(returnUrl ?? "/"))
//{
if ( SUserInfo . UserType = = 11 )
{
return RedirectToLocal ( "/croom/grades" ) ;
}
else if ( vm . IsSiteAdmin )
{
return RedirectToLocal ( "/user/users" ) ;
}
return RedirectToLocal ( "/" ) ;
//}
//else
//{
// return RedirectToLocal(returnUrl);
//}
}
}
else
{
Dao . Insert ( "users.loginlog" , ht ) ;
}
}
else
{
ht [ "LoginLog" ] = vm . User . userid ;
ht [ "LoginStatus" ] = 7 ;
Dao . Insert ( "users.loginlog" , ht ) ;
}
vm . LoginFailedId = LoginStatus ;
vm . IsLoginFailed = true ;
return View ( vm ) ;
}
//[Authorize]
public ActionResult Logout ( )
{
//HttpContext.Session.Clear();
//System.Web.Security.FormsAuthentication.SignOut();
//return RedirectToAction(nameof(AccountController.Index), "Account");
//HttpContext.Session.Clear();
//System.Web.Security.FormsAuthentication.SignOut();
//Response.Cookies[SUI].Expires = DateTime.Now.AddDays(-1);
CookieClear ( null , true ) ;
return Redirect ( "/Account/Index" ) ;
}
private ActionResult RedirectToLocal ( string returnUrl )
{
if ( Url . IsLocalUrl ( returnUrl ) )
{
return Redirect ( returnUrl ) ;
}
else
{
return RedirectToAction ( nameof ( HomeController . Index ) , "Home" ) ;
}
}
[AllowAnonymous]
public JsonResult NoPermit ( int _code = 9999 , String _msg = "권한이 없습니다." )
{
return Json ( new JsonRtn ( ) { code = _code , msg = _msg } , JsonRequestBehavior . AllowGet ) ;
}
[AllowAnonymous]
public JsonResult NoAuth ( int _code = 9999 , String _msg = "인증이 없습니다." )
{
return Json ( new JsonRtn ( ) { code = _code , msg = _msg } , JsonRequestBehavior . AllowGet ) ;
}
[AllowAnonymous]
public ActionResult Error ( NP . Model . JsonRtn vm = null , int _code = 0 )
{
vm = vm ? ? new JsonRtn ( ) { } ;
vm . msg = vm . msg ? ? "503" ;
Exception exception = Server . GetLastError ( ) ;
Response . Clear ( ) ;
ViewBag . ErrorMsg = "" ;
HttpException httpException = ( HttpException ) exception ;
if ( httpException ! = null )
{
NP . Base . Logger . Error ( "ApplicationError" + vm . msg , exception ) ;
}
Server . ClearError ( ) ;
if ( Request . IsAjaxRequest ( ) )
{
if ( _code = = 9991 )
{
return JsonError < String > ( Base . ENUM . JSONCode . TimeOut , vm . msg + ":" + Request . Url . AbsolutePath + ( exception ? ? new Exception ( ) ) . Message , "/Account/Index" ) ;
}
return JsonError < Exception > ( Base . ENUM . JSONCode . Error , vm . msg + ":" + Request . Url . AbsolutePath + ( exception ? ? new Exception ( ) ) . Message , exception ) ;
}
return View ( "Error" ) ;
}
[AllowAnonymous]
public ActionResult Error403 ( NP . Model . JsonRtn vm )
{
vm . msg = "403" ;
return Error ( vm ) ;
}
[AllowAnonymous]
public ActionResult Error404 ( NP . Model . JsonRtn vm )
{
vm . msg = "404" + ( Request . IsLocal ? Request . Url . Query : "" ) ;
return Error ( vm ) ;
}
[AllowAnonymous]
public ActionResult Error500 ( NP . Model . JsonRtn vm )
{
vm . msg = "500" ;
return Error ( vm ) ;
}
public ActionResult Status335 ( String sss )
{
//if ("ynpartners123".Equals(sss))
//{
// var users = Dao.Get<Users>("users.get335", new Hashtable() { });
// var em = Dao.Get<MailTP>("mm.mailtp.get", 2).FirstOrDefault();
// if (em != null)
// {
// foreach (var u in users)
// {
2020-10-12 15:32:10 +09:00
// SendEmail(999, u.email, "", "영남건설기술교육원", "[영남건설기술교육원] 휴면계정알림", em.MHtml.Replace("^회원명^", u.username).Replace("../img/", GetConfig("fronturl") + "/img/").Replace("^아이디^", u.email).Replace("^fronturl^", GetConfig("fronturl")), "", "");
2020-10-12 14:39:23 +09:00
// }
// }
//}
return null ;
}
public ActionResult AdminEE ( int un , int eek , int at , int an )
{
if ( SUserInfo . IsAdmin | | SUserInfo . IsSiteAdmin )
{
Random r = new Random ( ) ;
var loginkey = r . Next ( 10000000 , 99999999 ) ;
var u = Dao . Get < Users > ( "users.eecall" , new Hashtable ( ) { { "userno" , un } , { "eek" , eek } , { "loginkey" , loginkey } } ) . FirstOrDefault ( ) ;
if ( u ! = null & & u . usertype = = 11 )
{
var cusertype = SUserInfo . UserType ;
var cuserno = SUserInfo . UserNo ;
CookieClear ( null , true ) ;
SUserInfo . UserNo = u . userno ;
SUserInfo . UserName = u . username ;
SUserInfo . UserType = u . usertype ;
SUserInfo . ASNo = u . asno ? ? 0 ;
SUserInfo . UserInfo = cusertype + "." + cuserno ;
SUserInfo . LoginIP = GetUserIP ( ) ;
SUserInfo . LoginKey = loginkey ;
base . AuthCookie ( false ) ;
return RedirectToAction ( "Index" , "Home" ) ;
}
}
return RedirectToAction ( "Index" ) ;
}
public ActionResult MenuReset ( string ddd )
{
if ( "rhksflwkfhrmdls999" . Equals ( ddd ) )
{
ResetMenuBase ( ) ;
}
return RedirectToAction ( "Index" ) ;
}
/// <summary>
/// 윈도우스케쥴러가 1시간에 한 번씩 호출
/// </summary>
/// <param name="sss"></param>
/// <returns></returns>
public ActionResult Encourage ( String sss , int test = 0 )
{
if ( test = = 1 )
{
SetError ( "encouragetest: " + DateTime . Now . ToString ( "yyyy-MM-dd HH:mm:ss" ) ) ;
}
else
{
var m = new Memo ( ) { Users = new List < MemoUser > ( ) { } } ;
if ( "nptech1234" . Equals ( sss ) )
{
//시간불규칙 대비해야 함
var lects = Dao . Get < SCDLect > ( "lect.encourages" , new Hashtable ( ) { { "dtime" , DateTime . Now . Minute > 30 ? ( DateTime . Now . Hour + 1 ) : DateTime . Now . Hour } , { "uno" , SUserInfo . UserNo } , { "uip" , GetUserIP ( ) } } ) ;
//1~7. 온라인/혼합 출석 80% 미만, 진행평가, 최종평가, 과제, 토론, 강의평가 미참여
{
foreach ( var u in lects . Where ( w = > w . scdno < 8 & & w . istalk = = 1 ) )
{
m . Users . Add ( new MemoUser ( )
{
userno = u . userno ,
smstype = "A" ,
isok = string . IsNullOrEmpty ( u . mobile ) ? - 1 : 1 ,
mobile = ( u . mobile ? ? "" ) . Replace ( "-" , "" ) ,
2020-10-12 15:32:10 +09:00
mcontents = string . Format ( "영남건설기술교육원입니다.\n\n[{0}]님이 수강중인 [{1}] 강좌의 교육 종료일이 {2}일 남았습니다. 종료되기전에 서둘러 " +
2020-10-12 14:39:23 +09:00
( u . scdno < 3 ? "학습을 진행" : u . scdno = = 3 ? "진행평가에" : u . scdno = = 4 ? "최종평가에" : u . scdno = = 5 ? "과제을 제출" : u . scdno = = 6 ? "토론에 참여" : u . scdno = = 7 ? "강의평가에 참여" : "-" ) + "해주세요.\n\n☞사이트 : https://edu.kfcf.or.kr" ,
u . username , u . cname , u . dday )
} ) ;
}
if ( m . Users . Where ( w = > w . isok = = 1 ) . Count ( ) > 0 )
{
Talk ( m . Users . Where ( w = > w . isok = = 1 ) . ToList ( ) , "encourage1" ) ;
m . Users . Clear ( ) ;
}
var masteremail = GetConfig ( "masteremail" ) ;
var senderemail = masteremail . Split ( ';' ) [ 0 ] ;
foreach ( var u in lects . Where ( w = > w . scdno < 3 & & w . isemail = = 1 ) )
{
if ( IsEmail ( u . email ) )
{
2020-10-12 15:32:10 +09:00
SendEmail ( masteremail . Split ( ';' ) [ 1 ] , GetInt ( masteremail . Split ( ';' ) [ 2 ] ) , masteremail . Split ( ';' ) [ 3 ] , masteremail . Split ( ';' ) [ 4 ] , 999 , u . email , senderemail , "[영남건설기술교육원]" , "[영남건설기술교육원] 진행평가 참여 알림" ,
string . Format ( "영남건설기술교육원입니다.<br><br>[{0}]님이 수강중인 [{1}] 강좌의 교육 종료일이 {2}일 남았습니다. 종료되기전에 서둘러 " +
2020-10-12 14:39:23 +09:00
( u . scdno < 3 ? "학습을 진행" : u . scdno = = 3 ? "진행평가에" : u . scdno = = 4 ? "최종평가에" : u . scdno = = 5 ? "과제을 제출" : u . scdno = = 6 ? "토론에 참여" : u . scdno = = 7 ? "강의평가에 참여" : "-" ) + " 진행해주세요.<br><br>☞사이트 : https://edu.kfcf.or.kr" ,
u . username , u . cname , u . dday ) ) ;
}
}
}
//8. 오프라인 출석
{
foreach ( var u in lects . Where ( w = > w . scdno = = 8 & & w . istalk = = 1 ) )
{
m . Users . Add ( new MemoUser ( )
{
userno = u . userno ,
smstype = "A" ,
isok = string . IsNullOrEmpty ( u . mobile ) ? - 1 : 1 ,
mobile = ( u . mobile ? ? "" ) . Replace ( "-" , "" ) ,
2020-10-12 15:32:10 +09:00
mcontents = string . Format ( "영남건설기술교육원입니다.\n\n{0}님이 신청중인 [{1}] 강좌의 교육이 [{2}]에 {3}에서 시작됩니다.\n\n☞사이트 : https://edu.kfcf.or.kr" ,
2020-10-12 14:39:23 +09:00
u . username , u . cname , u . stime . ToString ( "yyyy-MM-dd" ) , u . place )
} ) ;
}
if ( m . Users . Where ( w = > w . isok = = 1 ) . Count ( ) > 0 )
{
Talk ( m . Users . Where ( w = > w . isok = = 1 ) . ToList ( ) , "encourage7" ) ;
m . Users . Clear ( ) ;
}
var masteremail = GetConfig ( "masteremail" ) ;
var senderemail = masteremail . Split ( ';' ) [ 0 ] ;
foreach ( var u in lects . Where ( w = > w . scdno = = 8 & & w . isemail = = 1 ) )
{
if ( IsEmail ( u . email ) )
{
2020-10-12 15:32:10 +09:00
SendEmail ( masteremail . Split ( ';' ) [ 1 ] , GetInt ( masteremail . Split ( ';' ) [ 2 ] ) , masteremail . Split ( ';' ) [ 3 ] , masteremail . Split ( ';' ) [ 4 ] , 999 , u . email , senderemail , "[영남건설기술교육원]" , "[영남건설기술교육원] 진행평가 참여 알림" ,
string . Format ( "영남건설기술교육원입니다.<br><br>{0}님이 신청중인 [{1}] 강좌의 교육이 [{2}]에 {3}에서 시작됩니다.<br><br>☞사이트 : https://edu.kfcf.or.kr" ,
2020-10-12 14:39:23 +09:00
u . username , u . cname , u . stime . ToString ( "yyyy-MM-dd" ) , u . place ) ) ;
}
}
}
//9. 자격검정 시험
{
foreach ( var u in lects . Where ( w = > w . scdno = = 9 & & w . istalk = = 1 ) )
{
m . Users . Add ( new MemoUser ( )
{
userno = u . userno ,
smstype = "A" ,
isok = string . IsNullOrEmpty ( u . mobile ) ? - 1 : 1 ,
mobile = ( u . mobile ? ? "" ) . Replace ( "-" , "" ) ,
2020-10-12 15:32:10 +09:00
mcontents = string . Format ( "영남건설기술교육원입니다.\n\n{0}님이 수강중인 [{1}] 자격검정이 [{2}]에 {3}에서 이뤄질 예정입니다.\n\n☞사이트: https://edu.kfcf.or.kr" ,
2020-10-12 14:39:23 +09:00
u . username , u . cname , u . stime . ToString ( "yyyy-MM-dd HH:mm" ) , u . place )
} ) ;
}
if ( m . Users . Where ( w = > w . isok = = 1 ) . Count ( ) > 0 )
{
Talk ( m . Users . Where ( w = > w . isok = = 1 ) . ToList ( ) , "encourage8" ) ;
m . Users . Clear ( ) ;
}
var masteremail = GetConfig ( "masteremail" ) ;
var senderemail = masteremail . Split ( ';' ) [ 0 ] ;
foreach ( var u in lects . Where ( w = > w . scdno = = 9 & & w . isemail = = 1 ) )
{
if ( IsEmail ( u . email ) )
{
2020-10-12 15:32:10 +09:00
SendEmail ( masteremail . Split ( ';' ) [ 1 ] , GetInt ( masteremail . Split ( ';' ) [ 2 ] ) , masteremail . Split ( ';' ) [ 3 ] , masteremail . Split ( ';' ) [ 4 ] , 999 , u . email , senderemail , "[영남건설기술교육원]" , "[영남건설기술교육원] 진행평가 참여 알림" ,
string . Format ( "영남건설기술교육원입니다.<br><br>{0}님이 수강중인 [{1}] 자격검정이 [{2}]에 {3}에서 이뤄질 예정입니다.<br><br>☞사이트: https://edu.kfcf.or.kr" ,
2020-10-12 14:39:23 +09:00
u . username , u . cname , u . stime . ToString ( "yyyy-MM-dd HH:mm" ) , u . place ) ) ;
}
}
}
}
}
return null ;
}
public String KFCFLOGINAUTH ( String userid )
{
if ( string . IsNullOrEmpty ( userid ) )
{
return "0" ;
}
Random r = new Random ( ) ;
int key = r . Next ( 10000000 , 99999999 ) ;
if ( Dao . Save ( "users.remotelogin.set" , new Hashtable ( ) { { "userid" , userid . Trim ( ) } , { "siteip" , GetUserIP ( ) } , { "remotekey" , key } } ) > 0 )
{
return key . ToString ( ) ;
}
return "0" ;
}
}
}