/// <summary>
        /// GitHubクライアントにアクセストークンセット
        /// </summary>
        /// <param name="userId"></param>
        /// <param name="userName"></param>
        /// <param name="gitHub"></param>
        /// <returns></returns>
        public GitHubClient SetCredencial(string userId, string userName, GitHubClient gitHub)
        {
            // クレデンシャル情報に適当な値を入れ、認証エラーが起きるようにする
            github.Credentials = new Credentials("aaaaaaaaaaaaaa");

            EntityOperation <UserEntity> entityOperation = new EntityOperation <UserEntity>();

            //検索操作を行う変数を生成
            TableOperation retrieveOperation = TableOperation.Retrieve <UserEntity>(userId, userName);

            //RowKeyがlabelのEntityを取得するクエリ
            TableQuery <UserEntity> query = new TableQuery <UserEntity>().Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, userId));

            //Entityリストから
            var entityList = StorageOperation.GetTableIfNotExistsCreate("user").ExecuteQuery(query);

            // Entityリストが空じゃなかったら
            if (entityList.Count() != 0)
            {
                // Entityリストをリスト形式に直す
                List <UserEntity> userEntityList = entityList.ToList();

                // Entityは一つしか取得されないため、リストの0番目を取得する
                UserEntity userEntity = userEntityList[0];

                // Entityのクレデンシャル情報をセットする
                github.Credentials = new Credentials(userEntity.AccessToken);
            }
            return(github);
        }
Esempio n. 2
0
        /// <summary>
        /// Json送信SlackApi用ヘッダー作成
        /// </summary>
        /// <returns></returns>
        public HttpClient CreateHeaderAsJson(string teamId)
        {
            // PartitionKeyがチームIDのEntityを取得するクエリ
            var query = new TableQuery <TeamIdEntity>()
                        .Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, teamId));

            var entityList = StorageOperation.GetTableIfNotExistsCreate("team").ExecuteQuery(query);

            // クエリ実行結果で要素がひとつでもあるかどうか
            var teamIdEntities = entityList.ToList();

            if (teamIdEntities.Any())
            {
                // クライアント作成
                var client = new HttpClient();

                // ヘッダー情報挿入
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                client.DefaultRequestHeaders.Authorization =
                    new AuthenticationHeaderValue("Bearer", teamIdEntities.First().Token);

                return(client);
            }

            throw new Exception();
        }
        /// <summary>
        /// リポジトリ照会
        /// </summary>
        /// <param name="channelId"></param>
        /// <param name="responseUrl"></param>
        /// <param name="teamId"></param>
        /// <param name="func"></param>
        /// <returns></returns>
        public static async Task GetRepository(string channelId, string responseUrl, string teamId, Func <string, Task> func)
        {
            // PartitionKeyがチャンネルIDのEntityを取得するクエリ
            var query = new TableQuery <ChannelIdEntity>()
                        .Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, channelId));

            // クエリ実行
            var entityList = StorageOperation.GetTableIfNotExistsCreate("channel").ExecuteQuery(query);

            // クエリ実行結果で要素がひとつでもあるかどうか
            var channelIdEntities = entityList.ToList();

            if (channelIdEntities.Any())
            {
                await func(channelIdEntities.First().Repository);
            }
            else
            {
                var model = new PostMessageModel()
                {
                    Channel       = channelId,
                    Text          = "登録リポジトリが存在しません。",
                    Response_type = "ephemeral"
                };

                var slackApi = new SlackApi();

                await slackApi.ExecutePostApiAsJson(model, responseUrl, teamId);
            }
        }
        /// <summary>
        /// テンプレート作成・編集(作成か編集か)
        /// </summary>
        /// <param name="context"></param>
        /// <param name="argument"></param>
        /// <returns></returns>
        public async Task TemplateMethod(IDialogContext context, IAwaitable <string> argument)
        {
            var way = await argument;

            //現在チャンネルのリポジトリ取得
            string repository = RedisCacheOperation.Connection.StringGet(GitHubDialog.channelId);

            //対象リポジトリのラベルをすべて取得
            var labelList = await GitHubDialog.github.Issue.Labels.GetAllForRepository(repository.Split('/')[0], repository.Split('/')[1]);

            //ラベルリストからラベル名のリストを生成
            var labelNameList_project = labelList.ToList().ConvertAll(x => x.Name);

            //RowKeyがlabelのEntityを取得するクエリ
            TableQuery <TemplateEntity> query = new TableQuery <TemplateEntity>().Where(TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.Equal, "label"));

            //Entityリストから
            List <string> labelNameList_table = StorageOperation.GetTableIfNotExistsCreate(string.Empty).ExecuteQuery(query).ToList().ConvertAll(x => x.PartitionKey);

            switch (way)
            {
            case "作成":
            {
                var labelNameList = labelNameList_project.Except(labelNameList_table).ToList();


                if (labelNameList.Count != 0)
                {
                    labelNameList.Add("キャンセルする");
                    PromptDialog.Choice(context, this.TemplateCreateInput, labelNameList, "作成したいテンプレートのラベルを選択してください");
                }
                else
                {
                    await context.PostAsync("テンプレートが未作成のラベルはありません");

                    context.Done <object>(context);
                }
                break;
            }

            case "編集":
            {
                if (labelNameList_table.Count != 0)
                {
                    labelNameList_table.Add("キャンセルする");
                    PromptDialog.Choice(context, this.TemplateEditInput, labelNameList_table, "編集したいラベルを選択してください");
                }
                else
                {
                    await context.PostAsync("テンプレートが作成済のラベルはありません");

                    context.Done <object>(context);
                }
                break;
            }
            }
        }
Esempio n. 5
0
        /// <summary>
        /// GitHubアクセストークンセット
        /// </summary>
        /// <param name="slackUserId"></param>
        public static void SetCredential(string slackUserId)
        {
            // PartitionKeyがSlackユーザIDのEntityを取得するクエリ
            TableQuery <UserEntity> query = new TableQuery <UserEntity>()
                                            .Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, slackUserId));

            // クエリ実行
            var entityList = StorageOperation.GetTableIfNotExistsCreate("user").ExecuteQuery(query);

            // クエリ実行結果で要素がひとつでもあるかどうか
            var userEntities = entityList.ToList();

            Client.Credentials = userEntities.Any() ? new Credentials(userEntities.First().AccessToken) : new Credentials("aaaaaaaaaaaaaa");
        }