示例#1
0
        public void UsuarioInvalido()
        {
            var gitHub = new GitHub();

            var usuario = gitHub.ObterUsuario("eduba");

            Assert.IsNull(usuario);
        }
示例#2
0
        public void UsuarioValido()
        {
            var gitHub = new GitHub();

            var usuario = gitHub.ObterUsuario("edubalf");

            Assert.AreEqual(8027415, usuario.id);
        }
示例#3
0
        /// <summary>
        /// 登录授权回调
        /// </summary>
        /// <param name="authorizeResult">获取授权码以及防伪标识</param>
        /// <returns></returns>
        public IActionResult AuthCallback(LoginBase.AuthorizeResult authorizeResult)
        {
            var vm = new ActionResultVM();

            try
            {
                if (string.IsNullOrWhiteSpace(authorizeResult.code))
                {
                    vm.Set(ARTag.unauthorized);
                }
                else
                {
                    //唯一标示
                    string openId = string.Empty;
                    //注册信息
                    var mo = new Domain.UserInfo()
                    {
                        LoginLimit     = 0,
                        UserSex        = 0,
                        UserCreateTime = DateTime.Now
                    };
                    //头像
                    string avatar = string.Empty;
                    //头像(高清)
                    string avatarhd = string.Empty;

                    Enum.TryParse(RouteData.Values["id"]?.ToString(), true, out ValidateloginType vtype);

                    switch (vtype)
                    {
                    case ValidateloginType.qq:
                    {
                        //获取 access_token
                        var tokenEntity = QQ.AccessToken(new QQ_AccessToken_RequestEntity()
                            {
                                code = authorizeResult.code
                            });

                        //获取 OpendId
                        var openidEntity = QQ.OpenId(new QQ_OpenId_RequestEntity()
                            {
                                access_token = tokenEntity.access_token
                            });

                        //获取 UserInfo
                        var userEntity = QQ.OpenId_Get_User_Info(new QQ_OpenAPI_RequestEntity()
                            {
                                access_token = tokenEntity.access_token,
                                openid       = openidEntity.openid
                            });

                        //身份唯一标识
                        openId     = openidEntity.openid;
                        mo.OpenId1 = openId;

                        mo.Nickname = userEntity.nickname;
                        mo.UserSex  = userEntity.gender == "男" ? 1 : 2;
                        mo.UserSay  = "";
                        mo.UserUrl  = "";

                        avatar   = userEntity.figureurl_qq_1;
                        avatarhd = userEntity.figureurl_qq_2;
                    }
                    break;

                    case ValidateloginType.weibo:
                    {
                        //获取 access_token
                        var tokenEntity = Weibo.AccessToken(new Weibo_AccessToken_RequestEntity()
                            {
                                code = authorizeResult.code
                            });

                        //获取 access_token 的授权信息
                        var tokenInfoEntity = Weibo.GetTokenInfo(new Weibo_GetTokenInfo_RequestEntity()
                            {
                                access_token = tokenEntity.access_token
                            });

                        //获取 users/show
                        var userEntity = Weibo.UserShow(new Weibo_UserShow_RequestEntity()
                            {
                                access_token = tokenEntity.access_token,
                                uid          = Convert.ToInt64(tokenInfoEntity.uid)
                            });

                        openId     = tokenEntity.access_token;
                        mo.OpenId2 = openId;

                        mo.Nickname = userEntity.screen_name;
                        mo.UserSex  = userEntity.gender == "m" ? 1 : userEntity.gender == "f" ? 2 : 0;
                        mo.UserSay  = userEntity.description;
                        mo.UserUrl  = userEntity.domain;

                        avatar   = userEntity.profile_image_url;
                        avatarhd = userEntity.avatar_large;
                    }
                    break;

                    case ValidateloginType.github:
                    {
                        //获取 access_token
                        var tokenEntity = GitHub.AccessToken(new GitHub_AccessToken_RequestEntity()
                            {
                                code = authorizeResult.code
                            });

                        //获取 user
                        var userEntity = GitHub.User(tokenEntity.access_token);

                        openId     = userEntity.id.ToString();
                        mo.OpenId3 = openId;

                        mo.Nickname = userEntity.name;
                        mo.UserSay  = userEntity.bio;
                        mo.UserUrl  = userEntity.blog;
                        mo.UserMail = userEntity.email;

                        avatar   = userEntity.avatar_url;
                        avatarhd = userEntity.avatar_url;
                    }
                    break;

                    case ValidateloginType.taobao:
                    {
                        //获取 access_token
                        var tokenEntity = TaoBao.AccessToken(new TaoBao_AccessToken_RequestEntity()
                            {
                                code = authorizeResult.code
                            });

                        openId     = tokenEntity.open_uid;
                        mo.OpenId4 = openId;

                        mo.Nickname = "淘宝用户";
                    }
                    break;

                    case ValidateloginType.microsoft:
                    {
                        //获取 access_token
                        var tokenEntity = MicroSoft.AccessToken(new MicroSoft_AccessToken_RequestEntity()
                            {
                                code = authorizeResult.code
                            });

                        //获取 user
                        var userEntity = MicroSoft.User(new MicroSoft_User_RequestEntity()
                            {
                                access_token = tokenEntity.access_token
                            });

                        openId     = userEntity.id.ToString();
                        mo.OpenId5 = openId;

                        mo.Nickname = userEntity.last_name + userEntity.first_name;
                        mo.UserMail = userEntity.emails?["account"].ToStringOrEmpty();
                    }
                    break;

                    case ValidateloginType.dingtalk:
                    {
                        //获取 user
                        var userEntity = DingTalk.User(new DingTalk_User_RequestEntity(), authorizeResult.code);

                        openId     = userEntity.openid;
                        mo.OpenId6 = openId;

                        mo.Nickname = userEntity.nick;
                    }
                    break;
                    }

                    mo.UserCreateTime = DateTime.Now;
                    mo.UserName       = openId;
                    mo.UserPwd        = Core.CalcTo.MD5(openId);
                    if (!string.IsNullOrWhiteSpace(avatar))
                    {
                        mo.UserPhoto = Core.UniqueTo.LongId().ToString() + ".jpg";
                    }

                    if (string.IsNullOrWhiteSpace(openId))
                    {
                        vm.Set(ARTag.unauthorized);
                        vm.Msg = "身份验证失败";
                    }
                    else
                    {
                        //判断是绑定操作
                        bool isbind = User.Identity.IsAuthenticated && authorizeResult.state.StartsWith("bind");
                        if (isbind)
                        {
                            int uid = new Application.UserAuthService(HttpContext).Get().UserId;

                            //检测是否绑定其它账号
                            var queryIsBind = db.UserInfo.Where(x => x.UserId != uid);
                            switch (vtype)
                            {
                            case ValidateloginType.qq:
                                queryIsBind = queryIsBind.Where(x => x.OpenId1 == openId);
                                break;

                            case ValidateloginType.weibo:
                                queryIsBind = queryIsBind.Where(x => x.OpenId2 == openId);
                                break;

                            case ValidateloginType.github:
                                queryIsBind = queryIsBind.Where(x => x.OpenId3 == openId);
                                break;

                            case ValidateloginType.taobao:
                                queryIsBind = queryIsBind.Where(x => x.OpenId4 == openId);
                                break;

                            case ValidateloginType.microsoft:
                                queryIsBind = queryIsBind.Where(x => x.OpenId5 == openId);
                                break;

                            case ValidateloginType.dingtalk:
                                queryIsBind = queryIsBind.Where(x => x.OpenId6 == openId);
                                break;
                            }
                            if (queryIsBind.Count() > 0)
                            {
                                return(Content("已绑定其它账号,不能重复绑定"));
                            }

                            var userInfo = db.UserInfo.Find(uid);

                            switch (vtype)
                            {
                            case ValidateloginType.qq:
                                userInfo.OpenId1 = openId;
                                break;

                            case ValidateloginType.weibo:
                                userInfo.OpenId2 = openId;
                                break;

                            case ValidateloginType.github:
                                userInfo.OpenId3 = openId;
                                break;

                            case ValidateloginType.taobao:
                                userInfo.OpenId4 = openId;
                                break;

                            case ValidateloginType.microsoft:
                                userInfo.OpenId5 = openId;
                                break;

                            case ValidateloginType.dingtalk:
                                userInfo.OpenId6 = openId;
                                break;
                            }
                            db.UserInfo.Update(userInfo);
                            db.SaveChanges();

                            return(Redirect("/user/setting"));
                        }
                        else
                        {
                            Domain.UserInfo vmo = null;
                            switch (vtype)
                            {
                            case ValidateloginType.qq:
                                vmo = db.UserInfo.FirstOrDefault(x => x.OpenId1 == openId);
                                break;

                            case ValidateloginType.weibo:
                                vmo = db.UserInfo.FirstOrDefault(x => x.OpenId2 == openId);
                                break;

                            case ValidateloginType.github:
                                vmo = db.UserInfo.FirstOrDefault(x => x.OpenId3 == openId);
                                break;

                            case ValidateloginType.taobao:
                                vmo = db.UserInfo.FirstOrDefault(x => x.OpenId4 == openId);
                                break;

                            case ValidateloginType.microsoft:
                                vmo = db.UserInfo.FirstOrDefault(x => x.OpenId5 == openId);
                                break;

                            case ValidateloginType.dingtalk:
                                vmo = db.UserInfo.FirstOrDefault(x => x.OpenId6 == openId);
                                break;
                            }
                            //未注册
                            if (vmo == null)
                            {
                                var ruvm = RegisterUser(mo);
                                if (ruvm.Code == 200)
                                {
                                    vm = ValidateLogin(vtype, mo);
                                    //拉取头像
                                    if (vm.Code == 200 && (!string.IsNullOrWhiteSpace(avatar) || !string.IsNullOrWhiteSpace(avatarhd)))
                                    {
                                        try
                                        {
                                            using var wc = new System.Net.WebClient();
                                            var ppath = Fast.PathTo.Combine(GlobalTo.WebRootPath, GlobalTo.GetValue("StaticResource:AvatarPath"));

                                            if (!System.IO.Directory.Exists(ppath))
                                            {
                                                System.IO.Directory.CreateDirectory(ppath);
                                            }

                                            if (!string.IsNullOrWhiteSpace(avatarhd))
                                            {
                                                wc.DownloadFile(avatar, Fast.PathTo.Combine(ppath, mo.UserPhoto));
                                            }
                                            else if (!string.IsNullOrWhiteSpace(avatar))
                                            {
                                                wc.DownloadFile(avatar, Fast.PathTo.Combine(ppath, mo.UserPhoto));
                                            }
                                        }
                                        catch (Exception)
                                        {
                                        }
                                    }
                                }
                                else
                                {
                                    vm.Msg = ruvm.Msg;
                                }
                            }
                            else
                            {
                                vm = ValidateLogin(vtype, vmo);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                vm.Set(ex);

                Filters.FilterConfigs.WriteLog(HttpContext, ex);
            }

            //成功
            if (vm.Code == 200)
            {
                var rurl = Request.Cookies["ReturnUrl"];
                rurl = string.IsNullOrWhiteSpace(rurl) ? "/" : rurl;

                if (rurl.StartsWith("http"))
                {
                    rurl += "?cookie=ok";
                }

                return(Redirect(rurl));
            }
            else
            {
                string msg = "【登录失败】( " + vm.Msg + " )".ToEncode();
                return(Redirect("/home/error?msg=" + msg));
            }
        }
示例#4
0
            /// <summary>
            /// 登录链接
            /// </summary>
            /// <param name="loginType">登录类型</param>
            /// <param name="authType">登录防伪追加标识,区分登录、注册</param>
            /// <returns></returns>
            public static string LoginLink(string loginType, string authType = "")
            {
                string url = string.Empty;

                if (Enum.TryParse(loginType, true, out LoginBase.LoginType vtype))
                {
                    switch (vtype)
                    {
                    case LoginBase.LoginType.QQ:
                    {
                        var reqe = new QQ_Authorization_RequestEntity();
                        if (!string.IsNullOrWhiteSpace(authType))
                        {
                            reqe.state = authType + reqe.state;
                        }
                        url = QQ.AuthorizationHref(reqe);
                    }
                    break;

                    case LoginBase.LoginType.WeiBo:
                    {
                        var reqe = new Weibo_Authorize_RequestEntity();
                        if (!string.IsNullOrWhiteSpace(authType))
                        {
                            reqe.state = authType + reqe.state;
                        }
                        url = Weibo.AuthorizeHref(reqe);
                    }
                    break;

                    case LoginBase.LoginType.GitHub:
                    {
                        var reqe = new GitHub_Authorize_RequestEntity();
                        if (!string.IsNullOrWhiteSpace(authType))
                        {
                            reqe.state = authType + reqe.state;
                        }
                        url = GitHub.AuthorizeHref(reqe);
                    }
                    break;

                    case LoginBase.LoginType.TaoBao:
                    {
                        var reqe = new TaoBao_Authorize_RequestEntity();
                        if (!string.IsNullOrWhiteSpace(authType))
                        {
                            reqe.state = authType + reqe.state;
                        }
                        url = TaoBao.AuthorizeHref(reqe);
                    }
                    break;

                    case LoginBase.LoginType.MicroSoft:
                    {
                        var reqe = new MicroSoft_Authorize_RequestEntity();
                        if (!string.IsNullOrWhiteSpace(authType))
                        {
                            reqe.state = authType + reqe.state;
                        }
                        url = MicroSoft.AuthorizeHref(reqe);
                    }
                    break;

                    case LoginBase.LoginType.DingTalk:
                    {
                        var reqe = new DingTalk_Authorize_RequestEntity();
                        if (!string.IsNullOrWhiteSpace(authType))
                        {
                            reqe.state = authType + reqe.state;
                        }
                        url = DingTalk.AuthorizeHref_ScanCode(reqe);
                    }
                    break;
                    }
                }

                if (string.IsNullOrWhiteSpace(url))
                {
                    url = "/account/login";
                }

                return(url);
            }
示例#5
0
        public IActionResult Projects()
        {
            var allProjects = GitHub.GetProjects();

            return(View(allProjects));
        }
示例#6
0
        //添加用户或更新用户信息
        public bool UpdateUserInfo(string loginType, string token)
        {
            if (loginType == "github")
            {
                GitHubUser githubUser = GitHub.GetGitHubUser(token);
                if (githubUser.id == 0)
                {
                    return(false);
                }
                NullUser user = NullUserDataSvc.GetByCondition(u => u.GitHubID == githubUser.id).FirstOrDefault();
                if (user == null)
                {
                    user                   = new NullUser();
                    user.LoginType         = "github";
                    user.GitHubAccessToken = token;
                    user.Name              = githubUser.name;
                    user.AvatarUrl         = githubUser.avatar_url;
                    user.GitHubLogin       = githubUser.login;
                    user.GitHubID          = githubUser.id;
                    user.Role              = (int)EnumUserRole.普通;
                    user.Email             = githubUser.email;
                    NullUserDataSvc.Add(user);

                    if (string.IsNullOrEmpty(user.Email))
                    {
                        SysMsg msg = new SysMsg();
                        msg.Date  = DateTime.Now;
                        msg.Title = "您还未设置邮箱";
                        msg.Msg   = "请到<a href=\"/Home/UserProfile\">我的主页</a>设置或修改<a href=\"https://github.com/settings/profile\" target=\"_blank\">GitHub</a>邮箱显示后更新账号。";
                        string key = MyRedisKeys.Pre_SysMsg + user.ID;
                        MyRedisDB.SetAdd(key, msg);
                    }
                    //添加一篇newbee
                    //NewBee nb = new NewBee();
                    //nb.OwnerID = user.ID;
                    //nb.Title = "大家好,我是" + (string.IsNullOrEmpty(user.Name) ? user.GitHubLogin : user.Name) + ",很高兴加入象空。";
                    //nb.FloorCount = 1;
                    //nb.LastFloorDate = DateTime.Now;
                    //NewBeeDataSvc.Add(nb);

                    //NewBeeFloor nbf = new NewBeeFloor();
                    //nbf.MDText = "我刚刚加入象空,点击查看更多关于我的信息,如果你有兴趣可以关注我的GitHub。";
                    //nbf.MDValue = "<p>我刚刚加入象空,点击查看更多关于我的信息,如果你有兴趣可以关注我的GitHub。</p>";
                    //nbf.NewBeeID = nb.ID;
                    //nbf.Order = 1;
                    //nbf.OwnerID = user.ID;
                    //NewBeeFloorDataSvc.Add(nbf);
                }
                else
                {
                    user.Name              = githubUser.name;
                    user.AvatarUrl         = githubUser.avatar_url;
                    user.GitHubID          = githubUser.id;
                    user.GitHubLogin       = githubUser.login;
                    user.GitHubAccessToken = token;
                    user.Email             = githubUser.email;
                    NullUserDataSvc.Update(user);
                }

                HttpContext.WriteCookie("UID", user.ID.ToString(), DateTime.Now.AddYears(3));
                HttpContext.WriteCookie("UName", githubUser.name, DateTime.Now.AddYears(3));
                HttpContext.WriteCookie("UAvatar", githubUser.avatar_url, DateTime.Now.AddYears(3));
                HttpContext.WriteCookie("LoginType", user.LoginType, DateTime.Now.AddYears(3));
                HttpContext.WriteCookie("GLogin", githubUser.login, DateTime.Now.AddYears(3));
                HttpContext.WriteCookie("SKEY", Utils.RijndaelEncrypt(user.ID.ToString()), DateTime.Now.AddYears(3));
                HttpContext.WriteCookie("Role", Utils.RijndaelEncrypt(user.ID.ToString() + ";" + user.Role.ToString()), DateTime.Now.AddYears(3));
            }
            return(true);
        }
		public MonoProjectCompiler (GitHub.GitHub_Repository repository) : base (repository)
		{
			
		}
示例#8
0
            /// <summary>
            /// 回调方法
            /// </summary>
            /// <param name="authorizeResult">接收授权码、防伪参数</param>
            public void AuthCallback(LoginBase.AuthorizeResult authorizeResult)
            {
                if (!string.IsNullOrWhiteSpace(authorizeResult.code) || !string.IsNullOrWhiteSpace(authorizeResult.auth_code))
                {
                    //唯一标识
                    string OpenId = string.Empty;

                    switch (loginType)
                    {
                    case LoginBase.LoginType.QQ:
                    {
                        //获取 access_token
                        var tokenEntity = QQ.AccessToken(new QQ_AccessToken_RequestEntity()
                            {
                                code = authorizeResult.code
                            });

                        //获取 OpendId
                        var openidEntity = QQ.OpenId(tokenEntity.access_token);

                        //获取 UserInfo
                        _ = QQ.OpenId_Get_User_Info(new QQ_OpenAPI_RequestEntity()
                            {
                                access_token = tokenEntity.access_token,
                                openid       = openidEntity.openid
                            });

                        //身份唯一标识
                        OpenId = openidEntity.openid;
                    }
                    break;

                    case LoginBase.LoginType.WeiBo:
                    {
                        //获取 access_token
                        var tokenEntity = Weibo.AccessToken(new Weibo_AccessToken_RequestEntity()
                            {
                                code = authorizeResult.code
                            });

                        //获取 access_token 的授权信息
                        var tokenInfoEntity = Weibo.GetTokenInfo(tokenEntity.access_token);

                        //获取 users/show
                        _ = Weibo.UserShow(new Weibo_UserShow_RequestEntity()
                            {
                                access_token = tokenEntity.access_token,
                                uid          = Convert.ToInt64(tokenInfoEntity.uid)
                            });

                        OpenId = tokenEntity.access_token;
                    }
                    break;

                    case LoginBase.LoginType.WeChat:
                    {
                        //获取 access_token
                        var tokenEntity = Login.WeChat.AccessToken(new WeChat_AccessToken_RequestEntity()
                            {
                                code = authorizeResult.code
                            });

                        //获取 user
                        _ = Login.WeChat.Get_User_Info(new WeChat_OpenAPI_RequestEntity()
                            {
                                access_token = tokenEntity.access_token,
                                openid       = tokenEntity.openid
                            });

                        //身份唯一标识
                        OpenId = tokenEntity.openid;
                    }
                    break;

                    case LoginBase.LoginType.GitHub:
                    {
                        //获取 access_token
                        var tokenEntity = GitHub.AccessToken(new GitHub_AccessToken_RequestEntity()
                            {
                                code = authorizeResult.code
                            });

                        //获取 user
                        var userEntity = GitHub.User(tokenEntity.access_token);

                        OpenId = userEntity.id.ToString();
                    }
                    break;

                    case LoginBase.LoginType.TaoBao:
                    {
                        //获取 access_token
                        var tokenEntity = TaoBao.AccessToken(new TaoBao_AccessToken_RequestEntity()
                            {
                                code = authorizeResult.code
                            });

                        OpenId = tokenEntity.open_uid;
                    }
                    break;

                    case LoginBase.LoginType.MicroSoft:
                    {
                        //获取 access_token
                        var tokenEntity = MicroSoft.AccessToken(new MicroSoft_AccessToken_RequestEntity()
                            {
                                code = authorizeResult.code
                            });

                        //获取 user
                        var userEntity = MicroSoft.User(tokenEntity.access_token);

                        OpenId = userEntity.id.ToString();
                    }
                    break;

                    case LoginBase.LoginType.DingTalk:
                    {
                        //获取 user
                        var userEntity = DingTalk.User(new DingTalk_User_RequestEntity(), authorizeResult.code);

                        OpenId = userEntity?.openid;
                    }
                    break;

                    case LoginBase.LoginType.Gitee:
                    {
                        //获取 access_token
                        var tokenEntity = Gitee.AccessToken(new Gitee_AccessToken_RequestEntity()
                            {
                                code = authorizeResult.code
                            });

                        //获取 user
                        var userEntity = Gitee.User(tokenEntity.access_token);

                        OpenId = userEntity.id.ToString();
                    }
                    break;

                    case LoginBase.LoginType.Google:
                    {
                        //获取 access_token
                        var tokenEntity = Google.AccessToken(new Google_AccessToken_RequestEntity()
                            {
                                code = authorizeResult.code
                            });

                        //获取 user
                        var userEntity = Google.User(tokenEntity.access_token);

                        OpenId = userEntity.sub;
                    }
                    break;

                    case LoginBase.LoginType.AliPay:
                    {
                        //获取 access_token
                        var tokenEntity = AliPay.AccessToken(new AliPay_AccessToken_RequestEntity()
                            {
                                code = authorizeResult.auth_code
                            });

                        //实际上这一步已经获取到 OpenId,登录验证可以了,获取个人信息还需调用下面的接口
                        //tokenEntity.user_id

                        //获取 user
                        var userEntity = AliPay.User(new AliPay_User_RequestEntity()
                            {
                                auth_token = tokenEntity.access_token
                            });

                        OpenId = userEntity.user_id;
                    }
                    break;

                    case LoginBase.LoginType.StackOverflow:
                    {
                        //获取 access_token
                        var tokenEntity = StackOverflow.AccessToken(new StackOverflow_AccessToken_RequestEntity()
                            {
                                code = authorizeResult.code
                            });

                        //获取 user
                        var userEntity = StackOverflow.User(new StackOverflow_User_RequestEntity()
                            {
                                access_token = tokenEntity.access_token
                            });

                        OpenId = userEntity.user_id;
                    }
                    break;
                    }

                    //拿到登录标识
                    if (string.IsNullOrWhiteSpace(OpenId))
                    {
                        //TO DO
                    }
                }
            }
示例#9
0
        public void TestRepositoryGitHub()
        {
            var repository = new GitHub().ReturnGitHubRepository();

            Assert.Equal("https://github.com/andreyfp15/test_meta_softplan", repository);
        }
示例#10
0
        /// <summary>
        /// 回调方法
        /// </summary>
        /// <param name="code">请求链接得到的code</param>
        /// <param name="loginType">登录类型</param>
        public void AuthCallback(string code, LoginBase.LoginType loginType)
        {
            if (string.IsNullOrWhiteSpace(code))
            {
                //打开链接没登录授权
            }
            else
            {
                //唯一标示
                string openId = string.Empty;

                switch (loginType)
                {
                case LoginBase.LoginType.QQ:
                {
                    //获取 access_token
                    var tokenEntity = QQ.AccessToken(new QQ_AccessToken_RequestEntity()
                        {
                            code = code
                        });

                    //获取 OpendId
                    var openidEntity = QQ.OpenId(new QQ_OpenId_RequestEntity()
                        {
                            access_token = tokenEntity.access_token
                        });

                    //获取 UserInfo
                    var userEntity = QQ.OpenId_Get_User_Info(new QQ_OpenAPI_RequestEntity()
                        {
                            access_token = tokenEntity.access_token,
                            openid       = openidEntity.openid
                        });

                    //身份唯一标识
                    openId = openidEntity.openid;
                }
                break;

                case LoginBase.LoginType.WeiBo:
                {
                    //获取 access_token
                    var tokenEntity = Weibo.AccessToken(new Weibo_AccessToken_RequestEntity()
                        {
                            code = code
                        });

                    //获取 access_token 的授权信息
                    var tokenInfoEntity = Weibo.GetTokenInfo(new Weibo_GetTokenInfo_RequestEntity()
                        {
                            access_token = tokenEntity.access_token
                        });

                    //获取 users/show
                    var userEntity = Weibo.UserShow(new Weibo_UserShow_RequestEntity()
                        {
                            access_token = tokenEntity.access_token,
                            uid          = Convert.ToInt64(tokenInfoEntity.uid)
                        });

                    openId = tokenEntity.access_token;
                }
                break;

                case LoginBase.LoginType.WeChat:
                {
                    //获取 access_token
                    var tokenEntity = WeChat.AccessToken(new WeChat_AccessToken_RequestEntity()
                        {
                            code = code
                        });

                    //获取 user
                    var userEntity = WeChat.Get_User_Info(new WeChat_OpenAPI_RequestEntity()
                        {
                            access_token = tokenEntity.access_token,
                            openid       = tokenEntity.openid
                        });

                    //身份唯一标识
                    openId = tokenEntity.openid;
                }
                break;

                case LoginBase.LoginType.GitHub:
                {
                    //申请的应用名称,非常重要
                    GitHubConfig.ApplicationName = "netnrf";

                    //获取 access_token
                    var tokenEntity = GitHub.AccessToken(new GitHub_AccessToken_RequestEntity()
                        {
                            code = code
                        });

                    //获取 user
                    var userEntity = GitHub.User(new GitHub_User_RequestEntity()
                        {
                            access_token = tokenEntity.access_token
                        });

                    openId = userEntity.id.ToString();
                }
                break;

                case LoginBase.LoginType.TaoBao:
                {
                    //获取 access_token
                    var tokenEntity = Taobao.AccessToken(new Taobao_AccessToken_RequestEntity()
                        {
                            code = code
                        });

                    openId = tokenEntity.open_uid;
                }
                break;

                case LoginBase.LoginType.MicroSoft:
                {
                    //获取 access_token
                    var tokenEntity = MicroSoft.AccessToken(new MicroSoft_AccessToken_RequestEntity()
                        {
                            code = code
                        });

                    //获取 user
                    var userEntity = MicroSoft.User(new MicroSoft_User_RequestEntity()
                        {
                            access_token = tokenEntity.access_token
                        });

                    openId = userEntity.id.ToString();
                }
                break;
                }

                //拿到登录标识
                if (string.IsNullOrWhiteSpace(openId))
                {
                    //TO DO
                }
            }
        }
示例#11
0
        public async override void OnNavigatedTo(INavigationParameters parameters)
        {
            try
            {
                UserDialogs.Instance.ShowLoading();
                if (parameters.ContainsKey("PRID"))
                {
                    long prid = 0;
                    var  id   = parameters.GetValue <string>("PRID");
                    long.TryParse(id, out prid);
                    if (prid != 0)
                    {
                        MasterPullRequests = new ObservableCollection <PullRequest>(await GitHub.GetRepository(prid));
                        PullRequests       = new ObservableCollection <PullRequest>();
                        GetItems();
                    }
                }

                if (parameters.ContainsKey("RepoName"))
                {
                    Title = parameters.GetValue <string>("RepoName");
                }


                base.OnNavigatedTo(parameters);
            }
            finally
            {
                UserDialogs.Instance.HideLoading();
            }
        }
示例#12
0
文件: Program.cs 项目: Bia10/ArcNET
        private static void Main()
        {
            Terminal.RenderLogo();

            var choice = Terminal.GetMainMenuChoice();

            ConsoleExtensions.Log($"Selected choice: {choice}", "info");
            switch (choice)
            {
            case "Extract game data":
                ConsoleExtensions.Log($"Choice: {choice} is currently unsupported!", "error");
                break;

            case "Parse extracted game data":
                Parser.ParseExtractedData();
                break;

            case "Install High-Res patch":
                var pathToHighResDir = GetHighResDir();
                var files            = Directory.EnumerateFiles(
                    pathToHighResDir, "*.*", SearchOption.AllDirectories).ToList();

                if (files.Count == 0)
                {
                    ConsoleExtensions.Log("HighResFolder empty proceeding to clone latest version", "info");
                    GitHub.CloneHighResPatch(pathToHighResDir);
                }

                var configPath = Path.Combine(pathToHighResDir + "\\config.ini");
                if (!File.Exists(configPath))
                {
                    throw new InvalidOperationException($"Config file not found at path: {configPath}");
                }

                ConsoleExtensions.Log("Gathering environment info", "info");
                var envInfo = new EnvironmentInfo();
                envInfo.Print();

                ConsoleExtensions.Log("Auto-config according to environment info", "info");
                HighResConfig.AutoConfigure(envInfo);

                ConsoleExtensions.Log("Summary of config.ini:", "info");
                AnsiConsole.Render(Terminal.ConfigTable());

                if (AnsiConsole.Confirm("Would you like to change config?"))
                {
                    AnsiConsole.WriteException(new NotImplementedException());
                    return;
                }

                HighResConfig.Write(configPath);
                LaunchWeidu(CmdArgs.Weidu.InstallHighResPatch, pathToHighResDir);
                break;

            case "Uninstall High-Res patch":
                LaunchWeidu(CmdArgs.Weidu.UninstallHighResPatch);
                break;

            default:
                ConsoleExtensions.Log($"Choice: {choice} is currently unsupported!", "error");
                break;
            }
        }
示例#13
0
        public IActionResult AuthCallback(string code)
        {
            var vm = new ActionResultVM();

            if (string.IsNullOrWhiteSpace(code))
            {
                vm.msg = "未授权,登录失败";
            }
            else
            {
                try
                {
                    //唯一标示
                    string openId = string.Empty;
                    //注册信息
                    var mo = new Domain.UserInfo()
                    {
                        LoginLimit     = 0,
                        UserSex        = 0,
                        UserCreateTime = DateTime.Now
                    };
                    //头像
                    string avatar = string.Empty;
                    //头像(高清)
                    string avatarhd = string.Empty;

                    if (Enum.TryParse(RouteData.Values["id"]?.ToString().ToLower(), out ValidateloginType vtype))
                    {
                        try
                        {
                            switch (vtype)
                            {
                            case ValidateloginType.qq:
                            {
                                //获取 access_token
                                var tokenEntity = QQ.AccessToken(new QQ_AccessToken_RequestEntity()
                                    {
                                        code = code
                                    });

                                //获取 OpendId
                                var openidEntity = QQ.OpenId(new QQ_OpenId_RequestEntity()
                                    {
                                        access_token = tokenEntity.access_token
                                    });

                                //获取 UserInfo
                                var userEntity = QQ.OpenId_Get_User_Info(new QQ_OpenAPI_RequestEntity()
                                    {
                                        access_token = tokenEntity.access_token,
                                        openid       = openidEntity.openid
                                    });

                                //身份唯一标识
                                openId     = openidEntity.openid;
                                mo.OpenId1 = openId;

                                mo.Nickname = userEntity.nickname;
                                mo.UserSex  = userEntity.gender == "男" ? 1 : 2;
                                mo.UserSay  = "";
                                mo.UserUrl  = "";

                                avatar   = userEntity.figureurl_qq_1;
                                avatarhd = userEntity.figureurl_qq_2;
                            }
                            break;

                            case ValidateloginType.weibo:
                            {
                                //获取 access_token
                                var tokenEntity = Weibo.AccessToken(new Weibo_AccessToken_RequestEntity()
                                    {
                                        code = code
                                    });

                                //获取 access_token 的授权信息
                                var tokenInfoEntity = Weibo.GetTokenInfo(new Weibo_GetTokenInfo_RequestEntity()
                                    {
                                        access_token = tokenEntity.access_token
                                    });

                                //获取 users/show
                                var userEntity = Weibo.UserShow(new Weibo_UserShow_RequestEntity()
                                    {
                                        access_token = tokenEntity.access_token,
                                        uid          = Convert.ToInt64(tokenInfoEntity.uid)
                                    });

                                openId     = tokenEntity.access_token;
                                mo.OpenId2 = openId;

                                mo.Nickname = userEntity.screen_name;
                                mo.UserSex  = userEntity.gender == "m" ? 1 : userEntity.gender == "f" ? 2 : 0;
                                mo.UserSay  = userEntity.description;
                                mo.UserUrl  = userEntity.domain;

                                avatar   = userEntity.profile_image_url;
                                avatarhd = userEntity.avatar_large;
                            }
                            break;

                            case ValidateloginType.github:
                            {
                                //获取 access_token
                                var tokenEntity = GitHub.AccessToken(new GitHub_AccessToken_RequestEntity()
                                    {
                                        code = code
                                    });

                                //获取 user
                                var userEntity = GitHub.User(new GitHub_User_RequestEntity()
                                    {
                                        access_token = tokenEntity.access_token
                                    });

                                openId     = userEntity.id.ToString();
                                mo.OpenId3 = openId;

                                mo.Nickname = userEntity.name;
                                mo.UserSay  = userEntity.bio;
                                mo.UserUrl  = userEntity.blog;
                                mo.UserMail = userEntity.email;

                                avatar   = userEntity.avatar_url;
                                avatarhd = userEntity.avatar_url;
                            }
                            break;

                            case ValidateloginType.taobao:
                            {
                                //获取 access_token
                                var tokenEntity = Taobao.AccessToken(new Taobao_AccessToken_RequestEntity()
                                    {
                                        code = code
                                    });

                                openId     = tokenEntity.open_uid;
                                mo.OpenId4 = openId;

                                mo.Nickname = "淘宝用户";
                            }
                            break;

                            case ValidateloginType.microsoft:
                            {
                                //获取 access_token
                                var tokenEntity = MicroSoft.AccessToken(new MicroSoft_AccessToken_RequestEntity()
                                    {
                                        code = code
                                    });

                                //获取 user
                                var userEntity = MicroSoft.User(new MicroSoft_User_RequestEntity()
                                    {
                                        access_token = tokenEntity.access_token
                                    });

                                openId     = userEntity.id.ToString();
                                mo.OpenId5 = openId;

                                mo.Nickname = userEntity.last_name + userEntity.first_name;
                                mo.UserMail = userEntity.emails["account"].ToStringOrEmpty();
                            }
                            break;
                            }
                        }
                        catch (Exception ex)
                        {
                            vm.msg = ex.Message;
                        }
                    }

                    mo.UserCreateTime = DateTime.Now;
                    mo.UserName       = openId;
                    mo.UserPwd        = Core.CalcTo.MD5(openId);
                    if (!string.IsNullOrWhiteSpace(avatar))
                    {
                        mo.UserPhoto = Core.UniqueTo.LongId().ToString() + ".jpg";
                    }

                    if (string.IsNullOrWhiteSpace(openId))
                    {
                        vm.msg = "身份验证失败";
                    }
                    else
                    {
                        //判断是绑定操作
                        bool isbind = false;
                        if (User.Identity.IsAuthenticated)
                        {
                            try
                            {
                                var aboa = Request.Cookies["AccountBindOAuth"];

                                if (!string.IsNullOrWhiteSpace(aboa) && (DateTime.Now - DateTime.Parse(aboa)).TotalSeconds < 120)
                                {
                                    int uid = new Func.UserAuthAid(HttpContext).Get().UserId;

                                    using (var db = new ContextBase())
                                    {
                                        //检测是否绑定其它账号
                                        var queryIsBind = db.UserInfo.Where(x => x.UserId != uid);
                                        switch (vtype)
                                        {
                                        case ValidateloginType.qq:
                                            queryIsBind = queryIsBind.Where(x => x.OpenId1 == openId);
                                            break;

                                        case ValidateloginType.weibo:
                                            queryIsBind = queryIsBind.Where(x => x.OpenId2 == openId);
                                            break;

                                        case ValidateloginType.github:
                                            queryIsBind = queryIsBind.Where(x => x.OpenId3 == openId);
                                            break;

                                        case ValidateloginType.taobao:
                                            queryIsBind = queryIsBind.Where(x => x.OpenId4 == openId);
                                            break;

                                        case ValidateloginType.microsoft:
                                            queryIsBind = queryIsBind.Where(x => x.OpenId5 == openId);
                                            break;
                                        }
                                        if (queryIsBind.Count() > 0)
                                        {
                                            return(Content("已绑定其它账号,不能重复绑定"));
                                        }

                                        var userInfo = db.UserInfo.Find(uid);

                                        switch (vtype)
                                        {
                                        case ValidateloginType.qq:
                                            userInfo.OpenId1 = openId;
                                            break;

                                        case ValidateloginType.weibo:
                                            userInfo.OpenId2 = openId;
                                            break;

                                        case ValidateloginType.github:
                                            userInfo.OpenId3 = openId;
                                            break;

                                        case ValidateloginType.taobao:
                                            userInfo.OpenId4 = openId;
                                            break;

                                        case ValidateloginType.microsoft:
                                            userInfo.OpenId5 = openId;
                                            break;
                                        }
                                        db.UserInfo.Update(userInfo);
                                        db.SaveChanges();
                                    }

                                    Response.Cookies.Delete("AccountBindOAuth");
                                    isbind = true;
                                }
                            }
                            catch (Exception)
                            {
                            }
                        }

                        //是绑定操作
                        if (isbind)
                        {
                            return(Redirect("/user/setting"));
                        }
                        else
                        {
                            using (var db = new ContextBase())
                            {
                                Domain.UserInfo vmo = null;
                                switch (vtype)
                                {
                                case ValidateloginType.qq:
                                    vmo = db.UserInfo.FirstOrDefault(x => x.OpenId1 == openId);
                                    break;

                                case ValidateloginType.weibo:
                                    vmo = db.UserInfo.FirstOrDefault(x => x.OpenId2 == openId);
                                    break;

                                case ValidateloginType.github:
                                    vmo = db.UserInfo.FirstOrDefault(x => x.OpenId3 == openId);
                                    break;

                                case ValidateloginType.taobao:
                                    vmo = db.UserInfo.FirstOrDefault(x => x.OpenId4 == openId);
                                    break;

                                case ValidateloginType.microsoft:
                                    vmo = db.UserInfo.FirstOrDefault(x => x.OpenId5 == openId);
                                    break;
                                }
                                //未注册
                                if (vmo == null)
                                {
                                    var ruvm = RegisterUser(mo);
                                    if (ruvm.code == 200)
                                    {
                                        vm = ValidateLogin(vtype, mo);
                                        //拉取头像
                                        if (vm.code == 200 && (!string.IsNullOrWhiteSpace(avatar) || !string.IsNullOrWhiteSpace(avatarhd)))
                                        {
                                            try
                                            {
                                                System.Net.WebClient wc = new System.Net.WebClient();

                                                var rootdir  = GlobalTo.WebRootPath + "/" + (GlobalTo.GetValue("StaticResource:RootDir").TrimStart('/').TrimEnd('/') + "/");
                                                var path     = GlobalTo.GetValue("StaticResource:AvatarPath").TrimEnd('/').TrimStart('/') + '/';
                                                var fullpath = rootdir + path;

                                                if (!System.IO.Directory.Exists(fullpath))
                                                {
                                                    System.IO.Directory.CreateDirectory(fullpath);
                                                }
                                                if (!string.IsNullOrWhiteSpace(avatar))
                                                {
                                                    wc.DownloadFile(avatar, fullpath + mo.UserPhoto);
                                                }
                                                if (!string.IsNullOrWhiteSpace(avatarhd))
                                                {
                                                    wc.DownloadFile(avatarhd, fullpath + mo.UserPhoto.Replace(".jpg", "_lg.jpg"));
                                                }
                                            }
                                            catch (Exception)
                                            {
                                            }
                                        }
                                    }
                                    else
                                    {
                                        vm.msg = ruvm.msg;
                                    }
                                }
                                else
                                {
                                    vm = ValidateLogin(vtype, vmo);
                                }
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    vm.msg = ex.Message;
                }
            }

            //成功
            if (vm.code == 200)
            {
                return(Redirect("/"));
            }
            else
            {
                string msg = "【登录失败】( " + vm.msg + " )".ToEncode();
                return(Redirect("/home/error?msg=" + msg));
            }
        }
示例#14
0
 public async Task UpdateGitFile() => await GitHub.SaveInstruments();
示例#15
0
        public async Task <Feedback> getPermissions(string tenant, string username)
        {
            Feedback feedback;

            try
            {
                AppUser _userData;
                if (username == "*****@*****.**")
                {
                    _userData = new AppUser()
                    {
                        username    = username,
                        displayname = "Amar Barge",
                        id          = -1,
                        isdeleted   = false,
                    };
                    _userData.permissions = _permissionRepo.GetInstance(tenant).getAllDefaultPermissions().ToArray();
                    feedback = new Feedback
                    {
                        Code    = 1,
                        Message = "Data fetched sucessfully",
                        data    = _userData
                    };
                }
                else
                {
                    _userData = _userRepo.GetInstance(tenant).getByUserName(username);
                    if (_userData != null)
                    {
                        _userData.addOnConfig = _userRepo.GetInstance(tenant).getConfigById(_userData.id);
                        _userData.permissions = _permissionRepo.GetInstance(tenant).getByUserId(_userData.id).ToArray();
                        feedback = new Feedback
                        {
                            Code    = 1,
                            Message = "Data fetched sucessfully",
                            data    = _userData
                        };
                    }
                    else
                    {
                        feedback = new Feedback
                        {
                            Code    = 0,
                            Message = "Record not found",
                            data    = null
                        };
                    }
                }
            }
            catch (Exception ex)
            {
                feedback = new Feedback
                {
                    Code    = 0,
                    Message = "Got the error while removing data",
                    data    = ex
                };
                GitHub.createIssue(ex, new { id = username, tenant = tenant }, _accessor.HttpContext.Request.Headers);
            }
            return(feedback);
        }
示例#16
0
            /// <summary>
            /// 回调方法
            /// </summary>
            /// <param name="authorizeResult">接收授权码、防伪参数</param>
            public void AuthCallback(LoginBase.AuthorizeResult authorizeResult)
            {
                if (string.IsNullOrWhiteSpace(authorizeResult.code))
                {
                    //打开链接没登录授权
                }
                else
                {
                    //唯一标示
                    string OpenId = string.Empty;

                    switch (loginType)
                    {
                    case LoginBase.LoginType.QQ:
                    {
                        //获取 access_token
                        var tokenEntity = QQ.AccessToken(new QQ_AccessToken_RequestEntity()
                            {
                                code = authorizeResult.code
                            });

                        //获取 OpendId
                        var openidEntity = QQ.OpenId(new QQ_OpenId_RequestEntity()
                            {
                                access_token = tokenEntity.access_token
                            });

                        //获取 UserInfo
                        _ = QQ.OpenId_Get_User_Info(new QQ_OpenAPI_RequestEntity()
                            {
                                access_token = tokenEntity.access_token,
                                openid       = openidEntity.openid
                            });

                        //身份唯一标识
                        OpenId = openidEntity.openid;
                    }
                    break;

                    case LoginBase.LoginType.WeiBo:
                    {
                        //获取 access_token
                        var tokenEntity = Weibo.AccessToken(new Weibo_AccessToken_RequestEntity()
                            {
                                code = authorizeResult.code
                            });

                        //获取 access_token 的授权信息
                        var tokenInfoEntity = Weibo.GetTokenInfo(new Weibo_GetTokenInfo_RequestEntity()
                            {
                                access_token = tokenEntity.access_token
                            });

                        //获取 users/show
                        _ = Weibo.UserShow(new Weibo_UserShow_RequestEntity()
                            {
                                access_token = tokenEntity.access_token,
                                uid          = Convert.ToInt64(tokenInfoEntity.uid)
                            });

                        OpenId = tokenEntity.access_token;
                    }
                    break;

                    case LoginBase.LoginType.WeChat:
                    {
                        //获取 access_token
                        var tokenEntity = WeChat.AccessToken(new WeChat_AccessToken_RequestEntity()
                            {
                                code = authorizeResult.code
                            });

                        //获取 user
                        _ = WeChat.Get_User_Info(new WeChat_OpenAPI_RequestEntity()
                            {
                                access_token = tokenEntity.access_token,
                                openid       = tokenEntity.openid
                            });

                        //身份唯一标识
                        OpenId = tokenEntity.openid;
                    }
                    break;

                    case LoginBase.LoginType.GitHub:
                    {
                        //获取 access_token
                        var tokenEntity = GitHub.AccessToken(new GitHub_AccessToken_RequestEntity()
                            {
                                code = authorizeResult.code
                            });

                        //获取 user
                        var userEntity = GitHub.User(new GitHub_User_RequestEntity()
                            {
                                access_token = tokenEntity.access_token
                            });

                        OpenId = userEntity.id.ToString();
                    }
                    break;

                    case LoginBase.LoginType.TaoBao:
                    {
                        //获取 access_token
                        var tokenEntity = TaoBao.AccessToken(new TaoBao_AccessToken_RequestEntity()
                            {
                                code = authorizeResult.code
                            });

                        OpenId = tokenEntity.open_uid;
                    }
                    break;

                    case LoginBase.LoginType.MicroSoft:
                    {
                        //获取 access_token
                        var tokenEntity = MicroSoft.AccessToken(new MicroSoft_AccessToken_RequestEntity()
                            {
                                code = authorizeResult.code
                            });

                        //获取 user
                        var userEntity = MicroSoft.User(new MicroSoft_User_RequestEntity()
                            {
                                access_token = tokenEntity.access_token
                            });

                        OpenId = userEntity.id.ToString();
                    }
                    break;

                    case LoginBase.LoginType.DingTalk:
                    {
                        //获取 user
                        var userEntity = DingTalk.User(new DingTalk_User_RequestEntity(), authorizeResult.code);

                        OpenId = userEntity?.openid;
                    }
                    break;

                    case LoginBase.LoginType.Gitee:
                    {
                        //获取 access_token
                        var tokenEntity = Gitee.AccessToken(new Gitee_AccessToken_RequestEntity()
                            {
                                code = authorizeResult.code
                            });

                        //获取 user
                        var userEntity = Gitee.User(new Gitee_User_RequestEntity()
                            {
                                access_token = tokenEntity.access_token
                            });

                        OpenId = userEntity.id.ToString();
                    }
                    break;
                    }

                    //拿到登录标识
                    if (string.IsNullOrWhiteSpace(OpenId))
                    {
                        //TO DO
                    }
                }
            }
 string CloneRepo()
 {
     return(GitHub.CloneRepository(Org, Repository, Hash));
 }
示例#18
0
        static async Task Main(string[] args)
        {
            Console.WriteLine("--------------------");
            Console.WriteLine("Version." + Assembly.GetExecutingAssembly().GetName().Version);

            IUpdateManager mgr = new GitHub("https://github.com/kuttsun/Test");

            // UpdateManager mgr = new Storage(@"C:\foo");

            if (mgr.CanUpdate(args))
            {
                Console.WriteLine("Start Update.");

                // 6. Update
                mgr.Update(args);

                // 7. Restart application
                mgr.RestartApplication(args, ExecutionType.DotNetCore);

                // 8. Close application
                return;
            }

            // 9. Update is complete
            switch (mgr.Completed(args))
            {
            case UpdateCompletedType.Success:
                Console.WriteLine("Update succeeded.");
                break;

            case UpdateCompletedType.Failure:
                Console.WriteLine("Update failed.");
                break;
            }

            // 1. Check for updates
            var coreUpdaterInfo = await mgr.CheckForUpdatesAsync();

            // 2. Compare versions
            var version1 = new Version(Assembly.GetExecutingAssembly().GetName().Version.ToString());
            var version2 = new Version(coreUpdaterInfo.Version);

            if (version1 < version2)
            {
                Console.WriteLine("New version found.");

                // 3. Download and extract
                await mgr.PrepareForUpdatesAsync(Directory.GetCurrentDirectory());

                // 4. Start updater (The updater is your new version application)
                mgr.StartUpdater(ExecutionType.DotNetCore);

                // 5. Close application
                return;
            }
            else
            {
                Console.WriteLine("Not found.");
            }

            Console.WriteLine("Hello World!");
            Console.ReadKey();
            return;
        }
 public AutofacGitHubRepositoriesFunction(GitHub github, HttpClient httpClient)
 {
     this._github     = github;
     this._httpClient = httpClient;
 }
示例#20
0
            /// <summary>
            /// 生成请求链接
            /// </summary>
            /// <param name="authType">在防伪参数追加信息(可用于登录、注册、绑定、解绑区分)</param>
            /// <returns></returns>
            public string Auth(string authType = "")
            {
                var url = string.Empty;

                switch (loginType)
                {
                case LoginBase.LoginType.QQ:
                {
                    var reqe = new QQ_Authorization_RequestEntity();
                    if (!string.IsNullOrWhiteSpace(authType))
                    {
                        reqe.state = authType + reqe.state;
                    }
                    url = QQ.AuthorizationHref(reqe);
                }
                break;

                case LoginBase.LoginType.WeiBo:
                {
                    var reqe = new Weibo_Authorize_RequestEntity();
                    if (!string.IsNullOrWhiteSpace(authType))
                    {
                        reqe.state = authType + reqe.state;
                    }
                    url = Weibo.AuthorizeHref(reqe);
                }
                break;

                case LoginBase.LoginType.GitHub:
                {
                    var reqe = new GitHub_Authorize_RequestEntity();
                    if (!string.IsNullOrWhiteSpace(authType))
                    {
                        reqe.state = authType + reqe.state;
                    }
                    url = GitHub.AuthorizeHref(reqe);
                }
                break;

                case LoginBase.LoginType.TaoBao:
                {
                    var reqe = new TaoBao_Authorize_RequestEntity();
                    if (!string.IsNullOrWhiteSpace(authType))
                    {
                        reqe.state = authType + reqe.state;
                    }
                    url = TaoBao.AuthorizeHref(reqe);
                }
                break;

                case LoginBase.LoginType.MicroSoft:
                {
                    var reqe = new MicroSoft_Authorize_RequestEntity();
                    if (!string.IsNullOrWhiteSpace(authType))
                    {
                        reqe.state = authType + reqe.state;
                    }
                    url = MicroSoft.AuthorizeHref(reqe);
                }
                break;

                case LoginBase.LoginType.WeChat:
                {
                    var reqe = new WeChat_Authorization_RequestEntity();
                    if (!string.IsNullOrWhiteSpace(authType))
                    {
                        reqe.state = authType + reqe.state;
                    }
                    url = Login.WeChat.AuthorizationHref(reqe);
                }
                break;

                case LoginBase.LoginType.DingTalk:
                {
                    var reqe = new DingTalk_Authorize_RequestEntity();
                    if (!string.IsNullOrWhiteSpace(authType))
                    {
                        reqe.state = authType + reqe.state;
                    }
                    //扫描模式
                    url = DingTalk.AuthorizeHref_ScanCode(reqe);

                    //密码模式
                    //url = DingTalk.AuthorizeHref_Password(reqe);
                }
                break;

                case LoginBase.LoginType.Gitee:
                {
                    var reqe = new Gitee_Authorize_RequestEntity();
                    if (!string.IsNullOrWhiteSpace(authType))
                    {
                        reqe.state = authType + reqe.state;
                    }
                    url = Gitee.AuthorizeHref(reqe);
                }
                break;

                case LoginBase.LoginType.Google:
                {
                    var reqe = new Google_Authorize_RequestEntity();
                    if (!string.IsNullOrWhiteSpace(authType))
                    {
                        reqe.state = authType + reqe.state;
                    }
                    url = Google.AuthorizeHref(reqe);
                }
                break;

                case LoginBase.LoginType.AliPay:
                {
                    var reqe = new AliPay_Authorize_RequestEntity();
                    if (!string.IsNullOrWhiteSpace(authType))
                    {
                        reqe.state = authType + reqe.state;
                    }
                    url = AliPay.AuthorizeHref(reqe);
                }
                break;

                case LoginBase.LoginType.StackOverflow:
                {
                    var reqe = new StackOverflow_Authorize_RequestEntity();
                    if (!string.IsNullOrWhiteSpace(authType))
                    {
                        reqe.state = authType + reqe.state;
                    }
                    url = StackOverflow.AuthorizeHref(reqe);
                }
                break;
                }

                return(url);
            }
示例#21
0
 string CloneRepo()
 {
     return(GitHub.CloneRepository(Org, Repository, Hash, DefaultBranch));
 }
示例#22
0
        static async Task Main(string[] args)
        {
            var config = ProcessArguments(args);

            if (config.GitRemoteUserName.Length == 0)
            {
                config.GitRemoteUserName = config.GitRemoteName;
            }

            await GitHub.CleanupUnusedBranches(config.GitRemoteUserName, config.MonoRepo, BranchPrefix, config.PersonalAccessToken, config.DryRun, config.Verbose);

            PullRequest?pr = await GetPullRequest(config);

            if (pr == null && config.PullRequestNumber != null)
            {
                return;
            }

            string local_branch_name, remote_branch_name, remote_name, remote_mono_repo;

            if (pr != null)
            {
                // We want to check if the branch for this PR, needs an update or not
                remote_mono_repo   = $"{pr.HeadRepoOwner}/mono";
                remote_branch_name = pr.HeadRef;
                remote_name        = config.GitRemoteName;

                // Use the branch name that the PR uses
                local_branch_name = pr.HeadRef;
            }
            else
            {
                GitHub.Trace($"no pr found, setting remote_mono_repo to {config.MonoRepo}", config.Verbose);

                remote_mono_repo   = config.MonoRepo;
                remote_branch_name = config.MonoBranch;
                remote_name        = config.GitRemoteOriginName;
                local_branch_name  = $"{BranchPrefix}_{config.MonoBranch}_{Guid.NewGuid ()}";
            }

            string msbuildBranchHead, msbuildRefInMono;

            try {
                bool required;
                (required, msbuildBranchHead, msbuildRefInMono) = await IsMSBuildBumpRequired(
                    msbuild_repo :      config.MSBuildRepo,
                    msbuild_branch :    config.MSBuildBranch,
                    mono_repo :         remote_mono_repo,
                    mono_branch :       remote_branch_name,
                    verbose :           config.Verbose);

                if (!required)
                {
                    Console.WriteLine($"-> Ref is updated already, nothing to be done.");
                    return;
                }
            } catch (HttpRequestException hre) {
                Console.WriteLine($"Error checking if bump is required: {hre.Message}");
                return;
            }

            Repository repo = new Repository(config.MonoWorkingDir);

            GitHub.PrepareMonoWorkingDirectory(repo:                repo,
                                               mono_working_dir:    config.MonoWorkingDir,
                                               remote_name:         remote_name,
                                               remote_branch_name:  remote_branch_name,
                                               local_branch_name:   local_branch_name,
                                               verbose:             config.Verbose);

            if (!(await UpdateMSBuildPy(msbuildBranchHead, config.MonoWorkingDir, repo)))
            {
                Console.WriteLine($"Error: unable to update msbuild.py");
                return;
            }

            // git commit
            var commit_msg = $"[{config.MonoBranch}] Bump msbuild to track {config.MSBuildBranch}";
            var sig        = repo.Config.BuildSignature(DateTimeOffset.Now);

            repo.Commit(commit_msg, sig, sig);

            if (!GitHub.GitPush(config.MonoWorkingDir, config.GitRemoteName, local_branch_name, local_branch_name, config.DryRun))
            {
                Console.WriteLine($"Error: git push failed");
                return;
            }

            if (!config.DryRun && pr != null)
            {
                Console.WriteLine($"---- Updated PR: {pr.HTML_URL} ---");
            }

            if (!config.DryRun && pr == null)
            {
                // Create new pull request
                var title = $"[{config.MonoBranch}] Bump msbuild to track {config.MSBuildBranch}";

                (var result, var html_url, _) = await GitHub.CreatePullRequest(
                    target_owner_repo :      remote_mono_repo,
                    base_branch_name :       config.MonoBranch,
                    head_ref :               $"{config.GitRemoteUserName}:{local_branch_name}",
                    personal_access_token :  config.PersonalAccessToken,
                    title :                  title,
                    body :                   String.Empty,
                    reviewers :              config.Reviewers,
                    verbose :                config.Verbose);

                if (result)
                {
                    Console.WriteLine($"----------- Created new PR at {html_url} ----------");
                }
                else
                {
                    Console.WriteLine("Failed to create PR.");
                }
            }

            await CheckRoslynAndNuGet(config.MonoRepo, config.MonoBranch, config.MSBuildRepo, msbuildRefInMono, msbuildBranchHead, config.Verbose);
        }
 private async void Button_CheckForUpdates_Click(object sender, EventArgs e)
 {
     GitHub.Update();
     await CheckProfileForUpdateAsync();
 }
示例#24
0
        public async Task <IActionResult> AuthCallback(string code)
        {
            var    result = new AccountValidationVM();
            string vtype  = RouteData.Values["id"]?.ToString().ToLower();

            try
            {
                //唯一标示
                string openId = string.Empty;
                try
                {
                    switch (vtype)
                    {
                    case "qq":
                    {
                        //获取 access_token
                        var accessToken_ResultEntity = QQ.AccessToken(new QQ_AccessToken_RequestEntity()
                            {
                                code = code
                            });

                        //获取 OpendId
                        var openId_ResultEntity = QQ.OpenId(new QQ_OpenId_RequestEntity()
                            {
                                access_token = accessToken_ResultEntity.access_token
                            });

                        //获取 UserInfo
                        var openId_Get_User_Info_ResultEntity = QQ.OpenId_Get_User_Info(new QQ_OpenAPI_RequestEntity()
                            {
                                access_token = accessToken_ResultEntity.access_token,
                                openid       = openId_ResultEntity.openid
                            });

                        //身份唯一标识
                        openId = openId_ResultEntity.openid;
                    }
                    break;

                    case "weibo":
                    {
                        //获取 access_token
                        var accessToken_ResultEntity = Weibo.AccessToken(new Weibo_AccessToken_RequestEntity()
                            {
                                code = code
                            });

                        //获取 access_token 的授权信息
                        var tokenInfo_ResultEntity = Weibo.GetTokenInfo(new Weibo_GetTokenInfo_RequestEntity()
                            {
                                access_token = accessToken_ResultEntity.access_token
                            });

                        //获取 users/show
                        var userShow_ResultEntity = Weibo.UserShow(new Weibo_UserShow_RequestEntity()
                            {
                                access_token = accessToken_ResultEntity.access_token,
                                uid          = Convert.ToInt64(tokenInfo_ResultEntity.uid)
                            });

                        openId = accessToken_ResultEntity.access_token;
                    }
                    break;

                    case "github":
                    {
                        //获取 access_token
                        var accessToken_ResultEntity = GitHub.AccessToken(new GitHub_AccessToken_RequestEntity()
                            {
                                code = code
                            });

                        //获取 user
                        var user_ResultEntity = GitHub.User(new GitHub_User_RequestEntity()
                            {
                                access_token = accessToken_ResultEntity.access_token
                            });

                        openId = user_ResultEntity.id.ToString();
                    }
                    break;

                    case "taobao":
                    {
                        //获取 access_token
                        var accessToken_ResultEntity = Taobao.AccessToken(new Taobao_AccessToken_RequestEntity()
                            {
                                code = code
                            });

                        openId = accessToken_ResultEntity.open_uid;
                    }
                    break;

                    case "microsoft":
                    {
                        //获取 access_token
                        var accessToken_ResultEntity = MicroSoft.AccessToken(new MicroSoft_AccessToken_RequestEntity()
                            {
                                code = code
                            });

                        //获取 user
                        var user_ResultEntity = MicroSoft.User(new MicroSoft_User_RequestEntity()
                            {
                                access_token = accessToken_ResultEntity.access_token
                            });

                        openId = user_ResultEntity.id.ToString();
                    }
                    break;
                    }
                }
                catch (Exception ex)
                {
                    result.message = ex.Message;
                }

                if (string.IsNullOrWhiteSpace(openId))
                {
                    result.message = "身份验证失败";
                }
                else
                {
                    //判断是绑定操作
                    bool isbind = false;
                    if (User.Identity.IsAuthenticated)
                    {
                        var aboa = Request.Cookies["AccountBindOAuth"];
                        if (!string.IsNullOrWhiteSpace(aboa) && (DateTime.Now - DateTime.Parse(aboa)).TotalSeconds < 120)
                        {
                            string uid = Func.Common.GetLoginUserInfo(HttpContext).UserId;

                            using (var db = new ContextBase())
                            {
                                var sysauth = db.SysAuthorize.Where(x => x.SuId == uid).FirstOrDefault();
                                var isadd   = sysauth == null;
                                //新增
                                if (isadd)
                                {
                                    sysauth = new SysAuthorize()
                                    {
                                        SaId = Guid.NewGuid().ToString(),
                                        SuId = uid
                                    };
                                }

                                switch (vtype)
                                {
                                case "qq":
                                    sysauth.OpenId1 = openId;
                                    break;

                                case "weibo":
                                    sysauth.OpenId2 = openId;
                                    break;

                                case "github":
                                    sysauth.OpenId3 = openId;
                                    break;

                                case "taobao":
                                    sysauth.OpenId4 = openId;
                                    break;

                                case "microsoft":
                                    sysauth.OpenId5 = openId;
                                    break;
                                }
                                if (isadd)
                                {
                                    db.SysAuthorize.Add(sysauth);
                                }
                                else
                                {
                                    db.SysAuthorize.Update(sysauth);
                                }
                                db.SaveChanges();
                            }

                            Response.Cookies.Delete("AccountBindOAuth");
                            isbind = true;

                            result.code    = 301;
                            result.message = "绑定成功";
                            result.url     = "/";
                        }
                    }

                    //非绑定操作
                    if (!isbind)
                    {
                        using (var db = new ContextBase())
                        {
                            SysUser vmo = null;
                            switch (vtype)
                            {
                            case "qq":
                                vmo = (from a in db.SysAuthorize
                                       join b in db.SysUser on a.SuId equals b.SuId
                                       where a.OpenId1 == openId
                                       select b).FirstOrDefault();
                                break;

                            case "weibo":
                                vmo = (from a in db.SysAuthorize
                                       join b in db.SysUser on a.SuId equals b.SuId
                                       where a.OpenId2 == openId
                                       select b).FirstOrDefault();
                                break;

                            case "github":
                                vmo = (from a in db.SysAuthorize
                                       join b in db.SysUser on a.SuId equals b.SuId
                                       where a.OpenId3 == openId
                                       select b).FirstOrDefault();
                                break;

                            case "taobao":
                                vmo = (from a in db.SysAuthorize
                                       join b in db.SysUser on a.SuId equals b.SuId
                                       where a.OpenId4 == openId
                                       select b).FirstOrDefault();
                                break;

                            case "microsoft":
                                vmo = (from a in db.SysAuthorize
                                       join b in db.SysUser on a.SuId equals b.SuId
                                       where a.OpenId5 == openId
                                       select b).FirstOrDefault();
                                break;
                            }

                            //没关联
                            if (vmo == null)
                            {
                                result.code    = 302;
                                result.message = "未关联账号,先账号密码登录再关联才能使用";
                            }
                            else
                            {
                                result = await LoginValidation(vmo, "_pass_", 1);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                result.message = ex.Message;
            }

            //成功
            if (result.code == 100)
            {
                return(Redirect(result.url));
            }
            else
            {
                return(View(result));
            }
        }
        public GitHub GetContentGitHub(ScrapingParameters parameters)
        {
            GitHub            git          = new GitHub();
            List <Repository> repositories = new List <Repository>();
            Queue <string>    mylist       = new Queue <string>();

            using (WebClient wc = new WebClient())
            {
                string page         = wc.DownloadString(parameters.Url);
                var    htmlDocument = new HtmlAgilityPack.HtmlDocument();
                htmlDocument.LoadHtml(page);


                git.Name = htmlDocument
                           .DocumentNode
                           .SelectSingleNode("//span[@itemprop='name']")
                           .InnerText;

                git.UserName = htmlDocument
                               .DocumentNode
                               .SelectSingleNode("//span[@itemprop='additionalName']")
                               .InnerText;

                git.Bio = htmlDocument
                          .DocumentNode
                          .SelectSingleNode("//div[@class='p-note user-profile-bio mb-2 js-user-profile-bio']")
                          .InnerText;


                HtmlNodeCollection nodes = htmlDocument.DocumentNode.SelectNodes("//a[@data-filterable-for='your-repos-filter']");
                foreach (HtmlNode htmlNode in (IEnumerable <HtmlNode>)nodes)
                {
                    if (!mylist.Contains(htmlNode.InnerText))
                    {
                        mylist.Enqueue(htmlNode.InnerText);
                    }
                }


                foreach (HtmlNode node in htmlDocument.DocumentNode.ge)
                {
                    if (node.Attributes.Count > 0)
                    {
                        Repository repository = new Repository();

                        //repository.Title = htmlDocument
                        //        .DocumentNode
                        //        .SelectSingleNode("//a[@itemprop='name codeRepository']")
                        //        .InnerText
                        //        .Trim()
                        //        .Replace("\\n","");



                        repository.Title = node.Descendants().First(x => x.Attributes["class"].Value.Equals("name codeRepository")).InnerText;

                        repositories.Add(repository);
                    }
                }

                git.Repositories = repositories;
            }
            return(git);
        }
示例#26
0
        //添加用户或更新用户信息
        public bool UpdateUserInfo(string loginType, string token)
        {
            if (loginType == "github")
            {
                GitHubUser githubUser = GitHub.GetGitHubUser(token);
                if (githubUser.id == 0)
                {
                    return(false);
                }
                NullUser user = NullUserDataSvc.GetByCondition(u => u.GitHubID == githubUser.id).FirstOrDefault();
                if (user == null)
                {
                    user                   = new NullUser();
                    user.LoginType         = "github";
                    user.GitHubAccessToken = token;
                    user.Name              = githubUser.name;
                    user.AvatarUrl         = githubUser.avatar_url;
                    user.GitHubLogin       = githubUser.login;
                    user.GitHubID          = githubUser.id;
                    user.Role              = (int)EnumUserRole.普通;
                    user.Email             = githubUser.email;
                    user.FollowingCount    = githubUser.following;
                    user.FollowerCount     = githubUser.followers;
                    NullUserDataSvc.Add(user);

                    //用关注人数小于500的机器人账号关注普通用户
                    if (user.Email == null || (user.Email != null && !user.Email.EndsWith("objnull.com")))
                    {
                        List <NullUser> robots = NullUserDataSvc.GetByCondition(u => u.Email.EndsWith("objnull.com") && u.GitHubLogin.Contains("robot")).ToList();
                        //检查是否已关注
                        bool         followed = false;
                        GitHubClient github   = new GitHubClient(new ProductHeaderValue("objnulldotcom"));
                        foreach (NullUser robot in robots)
                        {
                            github.Credentials = new Credentials(robot.GitHubAccessToken);
                            if (github.User.Followers.IsFollowing(robot.GitHubLogin, user.GitHubLogin).Result)
                            {
                                followed = true;
                                break;
                            }
                        }
                        //关注
                        if (!followed)
                        {
                            NullUser frobot = robots.Where(r => r.FollowingCount < 500).First();

                            github.Credentials = new Credentials(frobot.GitHubAccessToken);
                            github.User.Get(frobot.GitHubLogin);
                            github.User.Followers.Follow(user.GitHubLogin);
                            frobot.FollowingCount += 1;
                            NullUserDataSvc.Update(frobot);
                        }
                    }

                    if (string.IsNullOrEmpty(user.Email))
                    {
                        SysMsg msg = new SysMsg();
                        msg.Date  = DateTime.Now;
                        msg.Title = "您还未设置邮箱";
                        msg.Msg   = "请到<a href=\"/Home/UserProfile\">我的主页</a>设置或修改<a href=\"https://github.com/settings/profile\" target=\"_blank\">GitHub</a>邮箱显示后更新账号。";
                        string key = MyRedisKeys.Pre_SysMsg + user.ID;
                        MyRedisDB.SetAdd(key, msg);
                    }
                }
                else
                {
                    user.Name              = githubUser.name;
                    user.AvatarUrl         = githubUser.avatar_url;
                    user.GitHubID          = githubUser.id;
                    user.GitHubLogin       = githubUser.login;
                    user.GitHubAccessToken = token;
                    user.Email             = githubUser.email;
                    user.FollowingCount    = githubUser.following;
                    user.FollowerCount     = githubUser.followers;
                    NullUserDataSvc.Update(user);
                }

                HttpContext.WriteCookie("UID", user.ID.ToString(), DateTime.Now.AddYears(3));
                HttpContext.WriteCookie("UName", HttpUtility.UrlEncode(githubUser.name), DateTime.Now.AddYears(3));
                HttpContext.WriteCookie("UAvatar", githubUser.avatar_url, DateTime.Now.AddYears(3));
                HttpContext.WriteCookie("LoginType", user.LoginType, DateTime.Now.AddYears(3));
                HttpContext.WriteCookie("GLogin", githubUser.login, DateTime.Now.AddYears(3));
                HttpContext.WriteCookie("SKEY", Utils.RijndaelEncrypt(user.ID.ToString()), DateTime.Now.AddYears(3));
                HttpContext.WriteCookie("Role", Utils.RijndaelEncrypt(user.ID.ToString() + ";" + user.Role.ToString()), DateTime.Now.AddYears(3));
            }
            return(true);
        }
示例#27
0
        private void timer_Tick(object sender, EventArgs e)
        {
            timer.Stop();

            if (GitHub.IsRepositoryValid(textBoxRepository.Text))
            {
                listBranches.Items.Add(new ItemBranchTechnical("LoadGitHubBranchLoading"));

                GitHub github = new GitHub(textBoxRepository.Text);

                GitHub.DownloadStatus status = github.RetrieveBranchList((branches, ex) => this.InvokeSafe(() => {
                    github.Dispose();
                    listBranches.Items.Clear();

                    if (ex != null)
                    {
                        btnDownload.Enabled = false;
                        listBranches.Items.Add(new ItemBranchTechnical("LoadGitHubBranchFailure"));

                        #if MONO
                        Exception testEx = ex.InnerException;

                        while (testEx != null)
                        {
                            if (testEx.GetType().FullName == "Mono.Security.Protocol.Tls.TlsException")
                            {
                                if (MessageBox.Show(Lang.Get["LoadGitHubTrustError"], Lang.Get["LoadGitHubError"], MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
                                {
                                    using (System.Diagnostics.Process process = System.Diagnostics.Process.Start("mozroots", "--import --ask-remove --quiet")){
                                        if (process != null)
                                        {
                                            process.WaitForExit();
                                        }
                                    }

                                    timer_Tick(timer, new EventArgs());
                                }

                                break;
                            }

                            testEx = testEx.InnerException;
                        }
                        #endif

                        return;
                    }

                    if (branches == null)
                    {
                        btnDownload.Enabled = false;
                        return;
                    }

                    foreach (string branch in branches)
                    {
                        listBranches.Items.Add(branch);

                        if (branch == listBranches.Text)
                        {
                            listBranches.SelectedIndex = listBranches.Items.Count - 1;
                        }
                    }

                    btnDownload.Enabled = true;
                }));

                switch (status)
                {
                case GitHub.DownloadStatus.NoInternet:
                    MessageBox.Show(Lang.Get["LoadGitHubNoInternet"], Lang.Get["LoadGitHubError"], MessageBoxButtons.OK, MessageBoxIcon.Error);
                    break;

                case GitHub.DownloadStatus.NoConnection:
                    MessageBox.Show(Lang.Get["LoadGitHubNoEstablishedConnection"], Lang.Get["LoadGitHubError"], MessageBoxButtons.OK, MessageBoxIcon.Error);
                    break;
                }
            }
        }
示例#28
0
        public override Upset[] ListPackages()
        {
            releases = GetPackagesReleases();

            GitHubAsset[] upsetAssets = releases
                                        .SelectMany <GitHubRelease, GitHubAsset>(rel => rel.assets.Where(asset => asset.name.EndsWith("Upset.xml")))
                                        .ToArray();

            string progressBarTitle = "Parsing Upsets from GitHub repository";
            int    index            = 0;

            List <Upset> upsetList = new List <Upset>();

            EditorUtility.DisplayProgressBar(progressBarTitle, "Please wait a little bit while Uplift parses the Upset in the GitHub repository at " + urlField, 0f);

            string assetPath;

            try
            {
                foreach (GitHubAsset asset in upsetAssets)
                {
                    try
                    {
                        StrictXmlDeserializer <Upset> deserializer = new StrictXmlDeserializer <Upset>();

                        EditorUtility.DisplayProgressBar(
                            progressBarTitle,
                            "Parsing " + asset.name,
                            (float)(index++) / upsetAssets.Length
                            );

                        if (!TryGetCachedItem(asset.name, out assetPath))
                        {
                            using (StreamReader sr = new StreamReader(GitHub.GetAssetStream(asset, GetToken())))
                                using (FileStream fs = new FileStream(assetPath, FileMode.Create))
                                {
                                    sr.BaseStream.CopyTo(fs);
                                }
                        }

                        using (FileStream fs = new FileStream(assetPath, FileMode.Open))
                        {
                            Upset upset = deserializer.Deserialize(fs);
                            upset.MetaInformation.dirName = asset.name;
                            upsetList.Add(upset);
                        }
                    }
                    catch (Exception e)
                    {
                        Debug.LogErrorFormat("An error occured while trying to get asset {0} ({1}, {2}) from GithubRepository", asset.name, asset.htmlURL, asset.apiURL);
                        throw e;
                    }
                }
            }
            finally
            {
                EditorUtility.ClearProgressBar();
            }

            return(upsetList.ToArray());
        }
示例#29
0
 public GitHubTest(GitHubFixture fixture)
 {
     this.fixture = fixture;
     mgr          = new GitHub("https://github.com/kuttsun/Test");
 }
示例#30
0
        public async Task <ActionResult <GenericResponse> > GitHubReleaseGet()
        {
            GitHub.ReleaseResponse?releaseResponse = await GitHub.GetLatestRelease(false).ConfigureAwait(false);

            return(releaseResponse != null?Ok(new GenericResponse <GitHubReleaseResponse>(new GitHubReleaseResponse(releaseResponse))) : StatusCode((int)HttpStatusCode.ServiceUnavailable, new GenericResponse(false, string.Format(CultureInfo.CurrentCulture, Strings.ErrorRequestFailedTooManyTimes, WebBrowser.MaxTries))));
        }
示例#31
0
        public async Task <ActionResult <GenericResponse> > GitHubReleaseGet(string version)
        {
            if (string.IsNullOrEmpty(version))
            {
                return(BadRequest(new GenericResponse(false, string.Format(Strings.ErrorIsEmpty, nameof(version)))));
            }

            GitHub.ReleaseResponse releaseResponse = version.Equals("latest", StringComparison.OrdinalIgnoreCase) ? await GitHub.GetLatestRelease().ConfigureAwait(false) : await GitHub.GetRelease(version).ConfigureAwait(false);

            return(releaseResponse != null?Ok(new GenericResponse <GitHubReleaseResponse>(new GitHubReleaseResponse(releaseResponse))) : StatusCode((int)HttpStatusCode.ServiceUnavailable, new GenericResponse(false, string.Format(Strings.ErrorRequestFailedTooManyTimes, WebBrowser.MaxTries))));
        }
示例#32
0
        public async Task <Feedback> save(string tenant, AppUser data)
        {
            Feedback feedback = new Feedback();

            try
            {
                AppNotification notification;
                if (data.notificationid == 0)
                {
                    notification = new AppNotification()
                    {
                        type     = _userRepo.GetInstance(tenant).tableName,
                        message  = "Saving data",
                        progress = 0
                    };
                    _notificationRepo.GetInstance(tenant).save(ref notification);
                    _hubContext.Clients.All.SendAsync("SendNotification", notification);
                }
                else
                {
                    notification = _notificationRepo.GetInstance(tenant).getById(data.notificationid);
                }
                try
                {
                    using (var transaction = DBServer.BeginTransaction())
                    {
                        if (_userRepo.GetInstance(tenant).save(ref data, transaction))
                        {
                            if (data.permissions != null && data.permissions.Length > 0)
                            {
                                data.permissions.ToList().ForEach(permission => { permission.appuserid = data.id; });
                                if (_permissionRepo.GetInstance(tenant).save(data.permissions.ToList(), transaction))
                                {
                                    transaction.Commit();
                                    notification.progress = 1;
                                    notification.message  = "Data saved sucessfully for User: "******"SendNotification", notification);
                                    feedback = new Feedback
                                    {
                                        Code    = 1,
                                        Message = "Data saved sucessfully",
                                        data    = data
                                    };
                                }
                            }
                            else
                            {
                                transaction.Commit();
                                notification.progress = 1;
                                notification.message  = "Data saved sucessfully";
                                notification.recordId = data.id;
                                _notificationRepo.GetInstance(tenant).save(ref notification);
                                _hubContext.Clients.All.SendAsync("SendNotification", notification);
                                feedback = new Feedback
                                {
                                    Code    = 1,
                                    Message = "Data saved sucessfully",
                                    data    = data
                                };
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    notification.progress = -1;
                    notification.message  = "Got the error while removing data";
                    _notificationRepo.GetInstance(tenant).save(ref notification);
                    _hubContext.Clients.All.SendAsync("SendNotification", notification);
                    feedback = new Feedback
                    {
                        Code    = 0,
                        Message = "Got the error while removing data",
                        data    = ex
                    };
                    GitHub.createIssue(ex, new { tenant = tenant, data = data }, _accessor.HttpContext.Request.Headers);
                }
            }
            catch (Exception ex)
            {
                GitHub.createIssue(ex, new { tenant = tenant, data = data }, _accessor.HttpContext.Request.Headers);
            }
            return(feedback);
        }
示例#33
0
        /// <summary>
        /// 登录授权回调
        /// </summary>
        /// <param name="authorizeResult">获取授权码以及防伪标识</param>
        /// <returns></returns>
        public IActionResult AuthCallback(LoginBase.AuthorizeResult authorizeResult)
        {
            var vm = new SharedResultVM();

            try
            {
                if (string.IsNullOrWhiteSpace(authorizeResult.code))
                {
                    vm.Set(SharedEnum.RTag.unauthorized);
                }
                else
                {
                    //唯一标示
                    string openId = string.Empty;
                    //注册信息
                    var mo = new Domain.UserInfo()
                    {
                        LoginLimit     = 0,
                        UserSex        = 0,
                        UserCreateTime = DateTime.Now
                    };
                    //头像
                    string avatar = string.Empty;

                    Enum.TryParse(RouteData.Values["id"]?.ToString(), true, out LoginBase.LoginType vtype);

                    switch (vtype)
                    {
                    case LoginBase.LoginType.QQ:
                    {
                        //获取 access_token
                        var tokenEntity = QQ.AccessToken(new QQ_AccessToken_RequestEntity()
                            {
                                code = authorizeResult.code
                            });
                        Console.WriteLine(tokenEntity.ToJson());

                        //获取 OpendId
                        var openidEntity = QQ.OpenId(tokenEntity.access_token);
                        Console.WriteLine(openidEntity.ToJson());

                        //获取 UserInfo
                        var userEntity = QQ.OpenId_Get_User_Info(new QQ_OpenAPI_RequestEntity()
                            {
                                access_token = tokenEntity.access_token,
                                openid       = openidEntity.openid
                            });
                        Console.WriteLine(userEntity.ToJson());

                        //身份唯一标识
                        openId     = openidEntity.openid;
                        mo.OpenId1 = openId;

                        mo.Nickname = userEntity.nickname;
                        mo.UserSex  = userEntity.gender == "男" ? 1 : 2;
                        mo.UserSay  = "";
                        mo.UserUrl  = "";

                        avatar = userEntity.figureurl_2;
                    }
                    break;

                    case LoginBase.LoginType.WeiBo:
                    {
                        //获取 access_token
                        var tokenEntity = Weibo.AccessToken(new Weibo_AccessToken_RequestEntity()
                            {
                                code = authorizeResult.code
                            });
                        Console.WriteLine(tokenEntity.ToJson());

                        //获取 access_token 的授权信息
                        var tokenInfoEntity = Weibo.GetTokenInfo(tokenEntity.access_token);
                        Console.WriteLine(tokenInfoEntity.ToJson());

                        //获取 users/show
                        var userEntity = Weibo.UserShow(new Weibo_UserShow_RequestEntity()
                            {
                                access_token = tokenEntity.access_token,
                                uid          = Convert.ToInt64(tokenInfoEntity.uid)
                            });
                        Console.WriteLine(userEntity.ToJson());

                        openId     = tokenEntity.access_token;
                        mo.OpenId2 = openId;

                        mo.Nickname = userEntity.screen_name;
                        mo.UserSex  = userEntity.gender == "m" ? 1 : userEntity.gender == "f" ? 2 : 0;
                        mo.UserSay  = userEntity.description;
                        mo.UserUrl  = userEntity.domain;

                        avatar = userEntity.avatar_large;
                    }
                    break;

                    case LoginBase.LoginType.WeChat:
                    {
                        //获取 access_token
                        var tokenEntity = Netnr.Login.WeChat.AccessToken(new WeChat_AccessToken_RequestEntity()
                            {
                                code = authorizeResult.code
                            });
                        Console.WriteLine(tokenEntity.ToJson());

                        //openId = tokenEntity.openid;

                        //获取 user
                        var userEntity = Netnr.Login.WeChat.Get_User_Info(new WeChat_OpenAPI_RequestEntity()
                            {
                                access_token = tokenEntity.access_token,
                                openid       = tokenEntity.openid
                            });
                        Console.WriteLine(userEntity.ToJson());

                        avatar = userEntity.headimgurl;
                    }
                    break;

                    case LoginBase.LoginType.GitHub:
                    {
                        //获取 access_token
                        var tokenEntity = GitHub.AccessToken(new GitHub_AccessToken_RequestEntity()
                            {
                                code = authorizeResult.code
                            });
                        Console.WriteLine(tokenEntity.ToJson());

                        //获取 user
                        var userEntity = GitHub.User(tokenEntity.access_token);
                        Console.WriteLine(userEntity.ToJson());

                        openId     = userEntity.id.ToString();
                        mo.OpenId3 = openId;

                        mo.Nickname = userEntity.name;
                        mo.UserSay  = userEntity.bio;
                        mo.UserUrl  = userEntity.blog;
                        mo.UserMail = userEntity.email;

                        avatar = userEntity.avatar_url;
                    }
                    break;

                    case LoginBase.LoginType.Gitee:
                    {
                        //获取 access_token
                        var tokenEntity = Gitee.AccessToken(new Gitee_AccessToken_RequestEntity()
                            {
                                code = authorizeResult.code
                            });
                        Console.WriteLine(tokenEntity.ToJson());

                        //获取 user
                        var userEntity = Gitee.User(tokenEntity.access_token);
                        Console.WriteLine(userEntity.ToJson());

                        //openId = userEntity.id.ToString();

                        mo.Nickname = userEntity.name;
                        mo.UserSay  = userEntity.bio;
                        mo.UserUrl  = userEntity.blog;

                        avatar = userEntity.avatar_url;
                    }
                    break;

                    case LoginBase.LoginType.TaoBao:
                    {
                        //获取 access_token
                        var tokenEntity = TaoBao.AccessToken(new TaoBao_AccessToken_RequestEntity()
                            {
                                code = authorizeResult.code
                            });
                        Console.WriteLine(tokenEntity.ToJson());

                        openId     = tokenEntity.open_uid;
                        mo.OpenId4 = openId;

                        mo.Nickname = "淘宝用户";
                    }
                    break;

                    case LoginBase.LoginType.MicroSoft:
                    {
                        //获取 access_token
                        var tokenEntity = MicroSoft.AccessToken(new MicroSoft_AccessToken_RequestEntity()
                            {
                                code = authorizeResult.code
                            });
                        Console.WriteLine(tokenEntity.ToJson());

                        //获取 user
                        var userEntity = MicroSoft.User(tokenEntity.access_token);
                        Console.WriteLine(userEntity.ToJson());

                        openId     = userEntity.id;
                        mo.OpenId5 = openId;

                        mo.Nickname = userEntity.last_name + userEntity.first_name;
                        mo.UserMail = userEntity.emails?["account"].ToStringOrEmpty();
                    }
                    break;

                    case LoginBase.LoginType.DingTalk:
                    {
                        //获取 user
                        var userEntity = DingTalk.User(new DingTalk_User_RequestEntity(), authorizeResult.code);
                        Console.WriteLine(userEntity.ToJson());

                        openId     = userEntity.openid;
                        mo.OpenId6 = openId;

                        mo.Nickname = userEntity.nick;
                    }
                    break;

                    case LoginBase.LoginType.Google:
                    {
                        //获取 access_token
                        var tokenEntity = Google.AccessToken(new Google_AccessToken_RequestEntity()
                            {
                                code = authorizeResult.code
                            });
                        Console.WriteLine(tokenEntity.ToJson());

                        //获取 user
                        var userEntity = Google.User(tokenEntity.access_token);
                        Console.WriteLine(userEntity.ToJson());

                        //openId = userEntity.sub;

                        avatar = userEntity.picture;
                    }
                    break;

                    case LoginBase.LoginType.AliPay:
                    {
                        //获取 access_token
                        var tokenEntity = AliPay.AccessToken(new AliPay_AccessToken_RequestEntity()
                            {
                                code = authorizeResult.code
                            });
                        Console.WriteLine(tokenEntity.ToJson());

                        //openId = tokenEntity.user_id;

                        //获取 user
                        var userEntity = AliPay.User(new AliPay_User_RequestEntity()
                            {
                                auth_token = tokenEntity.access_token
                            });
                        Console.WriteLine(userEntity.ToJson());

                        avatar = userEntity.avatar;
                    }
                    break;

                    case LoginBase.LoginType.StackOverflow:
                    {
                        //获取 access_token
                        var tokenEntity = StackOverflow.AccessToken(new StackOverflow_AccessToken_RequestEntity()
                            {
                                code = authorizeResult.code
                            });
                        Console.WriteLine(tokenEntity.ToJson());

                        //获取 user
                        var userEntity = StackOverflow.User(new StackOverflow_User_RequestEntity()
                            {
                                access_token = tokenEntity.access_token
                            });
                        Console.WriteLine(userEntity.ToJson());

                        //openId= userEntity.user_id;

                        avatar = userEntity.profile_image;
                    }
                    break;
                    }

                    mo.UserCreateTime = DateTime.Now;
                    mo.UserName       = openId;
                    mo.UserPwd        = CalcTo.MD5(openId);
                    if (!string.IsNullOrWhiteSpace(avatar))
                    {
                        mo.UserPhoto = UniqueTo.LongId().ToString() + ".jpg";
                    }
                    Console.WriteLine(mo.ToJson());

                    if (string.IsNullOrWhiteSpace(openId))
                    {
                        vm.Set(SharedEnum.RTag.unauthorized);
                        vm.Msg = "身份验证失败";
                    }
                    else
                    {
                        //判断是绑定操作
                        bool isbind = User.Identity.IsAuthenticated && authorizeResult.state.StartsWith("bind");
                        if (isbind)
                        {
                            int uid = Apps.LoginService.Get(HttpContext).UserId;

                            //检测是否绑定其它账号
                            var queryIsBind = db.UserInfo.Where(x => x.UserId != uid);
                            switch (vtype)
                            {
                            case LoginBase.LoginType.QQ:
                                queryIsBind = queryIsBind.Where(x => x.OpenId1 == openId);
                                break;

                            case LoginBase.LoginType.WeiBo:
                                queryIsBind = queryIsBind.Where(x => x.OpenId2 == openId);
                                break;

                            case LoginBase.LoginType.GitHub:
                                queryIsBind = queryIsBind.Where(x => x.OpenId3 == openId);
                                break;

                            case LoginBase.LoginType.TaoBao:
                                queryIsBind = queryIsBind.Where(x => x.OpenId4 == openId);
                                break;

                            case LoginBase.LoginType.MicroSoft:
                                queryIsBind = queryIsBind.Where(x => x.OpenId5 == openId);
                                break;

                            case LoginBase.LoginType.DingTalk:
                                queryIsBind = queryIsBind.Where(x => x.OpenId6 == openId);
                                break;
                            }
                            if (queryIsBind.Any())
                            {
                                return(Content("已绑定其它账号,不能重复绑定"));
                            }

                            var userInfo = db.UserInfo.Find(uid);

                            switch (vtype)
                            {
                            case LoginBase.LoginType.QQ:
                                userInfo.OpenId1 = openId;
                                break;

                            case LoginBase.LoginType.WeiBo:
                                userInfo.OpenId2 = openId;
                                break;

                            case LoginBase.LoginType.GitHub:
                                userInfo.OpenId3 = openId;
                                break;

                            case LoginBase.LoginType.TaoBao:
                                userInfo.OpenId4 = openId;
                                break;

                            case LoginBase.LoginType.MicroSoft:
                                userInfo.OpenId5 = openId;
                                break;

                            case LoginBase.LoginType.DingTalk:
                                userInfo.OpenId6 = openId;
                                break;
                            }
                            db.UserInfo.Update(userInfo);
                            db.SaveChanges();

                            return(Redirect("/user/setting"));
                        }
                        else
                        {
                            Domain.UserInfo vmo = null;
                            switch (vtype)
                            {
                            case LoginBase.LoginType.QQ:
                                vmo = db.UserInfo.FirstOrDefault(x => x.OpenId1 == openId);
                                break;

                            case LoginBase.LoginType.WeiBo:
                                vmo = db.UserInfo.FirstOrDefault(x => x.OpenId2 == openId);
                                break;

                            case LoginBase.LoginType.GitHub:
                                vmo = db.UserInfo.FirstOrDefault(x => x.OpenId3 == openId);
                                break;

                            case LoginBase.LoginType.TaoBao:
                                vmo = db.UserInfo.FirstOrDefault(x => x.OpenId4 == openId);
                                break;

                            case LoginBase.LoginType.MicroSoft:
                                vmo = db.UserInfo.FirstOrDefault(x => x.OpenId5 == openId);
                                break;

                            case LoginBase.LoginType.DingTalk:
                                vmo = db.UserInfo.FirstOrDefault(x => x.OpenId6 == openId);
                                break;
                            }
                            //未注册
                            if (vmo == null)
                            {
                                var ruvm = RegisterUser(mo);
                                if (ruvm.Code == 200)
                                {
                                    vm = ValidateLogin(vtype, mo);
                                    //拉取头像
                                    if (vm.Code == 200 && !string.IsNullOrWhiteSpace(avatar))
                                    {
                                        try
                                        {
                                            //物理根路径
                                            var prp   = GlobalTo.GetValue("StaticResource:PhysicalRootPath").Replace("~", GlobalTo.ContentRootPath);
                                            var ppath = PathTo.Combine(prp, GlobalTo.GetValue("StaticResource:AvatarPath"));

                                            if (!Directory.Exists(ppath))
                                            {
                                                Directory.CreateDirectory(ppath);
                                            }

                                            HttpTo.DownloadSave(HttpTo.HWRequest(avatar), PathTo.Combine(ppath, mo.UserPhoto));
                                        }
                                        catch (Exception ex)
                                        {
                                            Console.WriteLine(ex);
                                        }
                                    }
                                }
                                else
                                {
                                    vm.Msg = ruvm.Msg;
                                }
                            }
                            else
                            {
                                vm = ValidateLogin(vtype, vmo);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Apps.FilterConfigs.WriteLog(HttpContext, ex);
                Response.Headers["X-Output-Msg"] = ex.ToJson();
                vm.Set(ex);
            }

            //成功
            if (vm.Code == 200)
            {
                var rurl = Request.Cookies["ReturnUrl"];
                rurl = string.IsNullOrWhiteSpace(rurl) ? "/" : rurl;

                if (rurl.StartsWith("http"))
                {
                    rurl += "?cookie=ok";
                }

                return(Redirect(rurl));
            }
            else
            {
                return(Redirect("/home/error"));
            }
        }