/// <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); }
/// <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; } } }
/// <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"); }