public static YingAuthenticateResult yauthenticate(String yemail, String ypassword)
        {
            zyy_users yuser = (from y in getYDataBaseManager().getYConnection().Table <zyy_users>()
                               where y.yemail == yemail
                               select y).FirstOrDefault();

            //if(yuser == null) throw iYingException.Ying(YingExceptionTypes.YingInvalidUsernameOrPassword);
            ypassword = BitConverter.ToString(new MD5CryptoServiceProvider().ComputeHash(Encoding.UTF8.GetBytes(ypassword))).Replace("-", "").ToLower();
            ypassword = BitConverter.ToString(new MD5CryptoServiceProvider().ComputeHash(Encoding.UTF8.GetBytes(ypassword + yuser.ysalt))).Replace("-", "").ToLower();
            if (yuser.ypassword != ypassword)
            {
                return(new YingAuthenticateResult {
                    ysuccess = false, ytype = YingExceptionTypes.YingInvalidUsernameOrPassword, yuser = yuser
                });
            }

            return(new YingAuthenticateResult {
                ysuccess = true, yuser = yuser
            });
        }
        public static YingAuthenticateResult yrefresh(String yaccessToken, String yclientToken)
        {
            zyy_yggdrasil_tokens ytoken = (from y in getYDataBaseManager().getYConnection().Table <zyy_yggdrasil_tokens>()
                                           where y.yaccessToken == yaccessToken
                                           select y).FirstOrDefault();

            if (ytoken.yaccessToken == null || !String.IsNullOrWhiteSpace(yclientToken) && ytoken.yclientToken != yclientToken || getYTimeStamp().TotalMilliseconds - ytoken.ytime > TimeSpan.FromDays(14.64).TotalMilliseconds)
            {
                return(new YingAuthenticateResult {
                    ysuccess = false, ytype = YingExceptionTypes.YingInvalidToken, ytoken = ytoken
                });
            }

            /*if (yuser.ypassword != ypassword)
             * {
             *  throw iYingException.Ying(YingExceptionTypes.YingInvalidUsernameOrPassword);
             * }*/
            //TODO: Ying updata token
            getYDataBaseManager().getYConnection().Delete <zyy_yggdrasil_tokens>(ytoken.yid);
            ytoken = new zyy_yggdrasil_tokens
            {
                yemail = ytoken.yemail,

                yclientToken = ytoken.yclientToken,
                yaccessToken = Guid.NewGuid().ToString("N"),

                ytime = getYTimeStamp().TotalMilliseconds
            };
            getYDataBaseManager().getYConnection().Insert(ytoken);

            zyy_users yuser = (from y in getYDataBaseManager().getYConnection().Table <zyy_users>()
                               where y.yemail == ytoken.yemail
                               select y).FirstOrDefault();

            return(new YingAuthenticateResult {
                ysuccess = true, yuser = yuser, ytoken = ytoken
            });
        }
Пример #3
0
        protected override void OnMessage(MessageEventArgs yevent)
        {
            YingStruct ymessage = JsonConvert.DeserializeObject <YingStruct>(yevent.Data);

            if (ymessage.Ying != "颖")
            {
                return;
            }
            switch (ymessage.ytype)
            {
            case YingStruct.YingType.Ying:
                this.SendAsync(JsonConvert.SerializeObject(new YingStruct()
                {
                    ytype = YingStruct.YingType.Ying,
                    ydata = new YingStruct.YingData()
                    {
                        ycode    = 0,
                        ysender  = "Ying Server",
                        ymessage = JsonConvert.SerializeObject(new iYingStruct()
                        {
                            yservername = "Ying Server Air Plus",
                            yipaddress  = "127.0.0.1",
                            ymotd       = "so tell me your story."
                        }),
                        ydata = null
                    }
                }), ycompleted);
                break;

            case YingStruct.YingType.YUpdata:
                this.SendAsync(JsonConvert.SerializeObject(new YingStruct()
                {
                    ytype = YingStruct.YingType.YUpdata,
                    ydata = new YingStruct.YingData()
                    {
                        ycode    = 0,
                        ysender  = "Ying Server",
                        ymessage = JsonConvert.SerializeObject(new YingUpdataStruct
                        {
                        }),
                        ydata = null
                    }
                }), ycompleted);
                break;

            case YingStruct.YingType.YLogin:

                YingLoginStruct        ylogin  = JsonConvert.DeserializeObject <YingLoginStruct>(ymessage.ydata.ymessage);
                YingAuthenticateResult yresult = YingAuthenticate.yauthenticate(ylogin.yuser.yemail, ylogin.yuser.ypassword);
                YingLoginStruct        yylogin = new YingLoginStruct();
                if (ylogin.yclientToken == null)
                {
                    ylogin.yclientToken = Guid.NewGuid().ToString("N");
                }

                if (yresult.ysuccess)
                {
                    String yaccessToken = Guid.NewGuid().ToString("N");
                    getYDataBaseManager().getYConnection().Insert(new zyy_yggdrasil_tokens
                    {
                        yemail = ylogin.yuser.yemail,

                        yclientToken = ylogin.yclientToken,
                        yaccessToken = yaccessToken,

                        ytime = getYTimeStamp().TotalMilliseconds
                    });

                    zyy_users yuser = yresult.yuser;
                    yuser.ypassword = null;
                    yuser.ysalt     = null;

                    yylogin = new YingLoginStruct
                    {
                        yclientToken = ylogin.yclientToken,
                        yaccessToken = yaccessToken,
                        ymessage     = "Ying Ok",
                        yuser        = yuser
                    };
                }
                else
                {
                    yylogin = new YingLoginStruct
                    {
                        yclientToken = ylogin.yclientToken,
                        yaccessToken = null,
                        ymessage     = "Ying Error"
                    };
                }

                this.SendAsync(JsonConvert.SerializeObject(new YingStruct()
                {
                    Ying  = "颖",
                    ytype = YingStruct.YingType.YLogin,
                    ydata = new YingStruct.YingData()
                    {
                        ycode    = 0,
                        ysender  = "Ying Server",
                        ymessage = JsonConvert.SerializeObject(yylogin),
                        ydata    = null
                    }
                }), ycompleted);
                break;

            case YingStruct.YingType.YCode:
                YingCodeStruct ycode = JsonConvert.DeserializeObject <YingCodeStruct>(ymessage.ydata.ymessage);
                if (ycode.ycode == 20020604)
                {
                    if (YingAuthenticate.yauthenticate(ycode.yemail, String.Empty).yuser.yid == 0)
                    {
                        int yycode = new Random().Next(100000, 1000000);
                        try
                        {
                            getYDataBaseManager().getYConnection().Delete <zyy_verification_code>((from y in getYDataBaseManager().getYConnection().Table <zyy_verification_code>()
                                                                                                   where y.yemail == ycode.yemail
                                                                                                   select y).FirstOrDefault().yid);
                        }
                        catch { }
                        getYDataBaseManager().getYConnection().Insert(new zyy_verification_code
                        {
                            yemail = ycode.yemail,
                            ycode  = yycode,
                            ytime  = getYTimeStamp().TotalMilliseconds
                        });
                        YingMail.ysend(ycode.yemail, new System.IO.StreamReader(getYFiles().getYResource("Ying.yresources.yhtml.Ying.html")).ReadToEnd().Replace("{{yname}}", "烟雨城").Replace("{{ycode}}", Convert.ToString(yycode)));
                        ycode.isYSuccess = true;
                        ycode.ymessage   = "验证码已发送到您的邮箱";
                        this.SendAsync(JsonConvert.SerializeObject(new YingStruct()
                        {
                            Ying  = "颖",
                            ytype = YingStruct.YingType.YCode,
                            ydata = new YingStruct.YingData()
                            {
                                ycode    = 0,
                                ysender  = "Ying Server",
                                ymessage = JsonConvert.SerializeObject(ycode),
                                ydata    = null
                            }
                        }), ycompleted);
                    }
                    else
                    {
                        ycode.isYSuccess = false;
                        ycode.ymessage   = "该邮箱地址已经被使用";
                        this.SendAsync(JsonConvert.SerializeObject(new YingStruct()
                        {
                            Ying  = "颖",
                            ytype = YingStruct.YingType.YCode,
                            ydata = new YingStruct.YingData()
                            {
                                ycode    = 0,
                                ysender  = "Ying Server",
                                ymessage = JsonConvert.SerializeObject(ycode),
                                ydata    = null
                            }
                        }), ycompleted);
                    }
                }
                else
                {
                    zyy_verification_code yycode = (from y in getYDataBaseManager().getYConnection().Table <zyy_verification_code>()
                                                    where y.yemail == ycode.yemail
                                                    select y).FirstOrDefault();
                    if (ycode.ycode == yycode.ycode)
                    {
                        ycode.isYSuccess = true;
                        ycode.ymessage   = "验证码正确";
                    }
                    else
                    {
                        ycode.isYSuccess = false;
                        ycode.ymessage   = "验证码错误";
                    }
                    this.SendAsync(JsonConvert.SerializeObject(new YingStruct()
                    {
                        Ying  = "颖",
                        ytype = YingStruct.YingType.YCode,
                        ydata = new YingStruct.YingData()
                        {
                            ycode    = 0,
                            ysender  = "Ying Server",
                            ymessage = JsonConvert.SerializeObject(ycode),
                            ydata    = null
                        }
                    }), ycompleted);
                }
                break;

            case YingStruct.YingType.YRegister:
                YingRegisterStruct yregister = JsonConvert.DeserializeObject <YingRegisterStruct>(ymessage.ydata.ymessage);
                if ((from y in getYDataBaseManager().getYConnection().Table <zyy_verification_code>()
                     where y.yemail == yregister.yuser.yemail
                     select y).FirstOrDefault().ycode == yregister.ycode)
                {
                    String ypassword = BitConverter.ToString(new MD5CryptoServiceProvider().ComputeHash(Encoding.UTF8.GetBytes(yregister.yuser.ypassword))).Replace("-", "").ToLower();
                    String ysalt     = new YingCode(6).YCode;
                    getYDataBaseManager().getYConnection().Insert(new zyy_users {
                        yusername = yregister.yuser.yusername,
                        ypassword = BitConverter.ToString(new MD5CryptoServiceProvider().ComputeHash(Encoding.UTF8.GetBytes(ypassword + ysalt))).Replace("-", "").ToLower(),
                        ysalt     = ysalt,
                        yopenid   = Guid.NewGuid().ToString("N"),
                        ysex      = yregister.yuser.ysex,
                        yemail    = yregister.yuser.yemail,
                        yprofiles = JsonConvert.SerializeObject(new String[] { new YingUUID(yregister.yuser.yusername).YUUID.ToString("N") })
                    });
                    getYDataBaseManager().getYConnection().Insert(new zyy_yggdrasil_profile
                    {
                        yyid       = new YingUUID(yregister.yuser.yusername).YUUID.ToString("N"),
                        yname      = yregister.yuser.yusername,
                        ytextureid = "zyy2a2a1399140968341fdedc4aa8b94"
                    });
                    if (yregister.yclientToken == null)
                    {
                        yregister.yclientToken = Guid.NewGuid().ToString("N");
                    }
                    String yaccessToken = Guid.NewGuid().ToString("N");
                    getYDataBaseManager().getYConnection().Insert(new zyy_yggdrasil_tokens
                    {
                        yemail = yregister.yuser.yemail,

                        yclientToken = yregister.yclientToken,
                        yaccessToken = yaccessToken,

                        ytime = getYTimeStamp().TotalMilliseconds
                    });
                    yregister.isYSuccess = true;
                    yregister.ymessage   = "注册成功";
                }
                else
                {
                    yregister.isYSuccess = false;
                    yregister.ymessage   = "验证码错误";
                    yregister.yuser      = new zyy_users();
                }
                this.SendAsync(JsonConvert.SerializeObject(new YingStruct()
                {
                    Ying  = "颖",
                    ytype = YingStruct.YingType.YRegister,
                    ydata = new YingStruct.YingData()
                    {
                        ycode    = 0,
                        ysender  = "Ying Server",
                        ymessage = JsonConvert.SerializeObject(yregister),
                        ydata    = null
                    }
                }), ycompleted);
                break;

            case YingStruct.YingType.YMessage:
                this.SendAsync(yevent.Data, ycompleted);
                break;

            case YingStruct.YingType.YMusic:
                this.SendAsync(yevent.Data, ycompleted);
                break;

            default:
                break;
            }
        }