Example #1
0
        /// <summary>
        /// 設定引数を元にADモジュールオブジェクト生成
        /// </summary>
        /// <returns>ADモジュールオブジェクト</returns>
        private static active_direcory_module get_ad_object()
        {
            Func <string, char, string[]> isolat_from_str = (string src_str, char delimiter) =>
            {
                string   pad_str  = src_str.Replace(" ", "");
                string[] dst_strs = src_str.Split(delimiter);
                return(dst_strs);
            };

            // ADからグループ
            var ad_obj = new active_direcory_module();

            string ad_server_name          = json_module.get_external_resource("src_ad_server");
            string ad_access_userid        = json_module.get_external_resource("src_access_userid");
            string ad_access_userpw        = json_module.get_external_resource("src_access_passwd");
            string ad_common_names         = json_module.get_external_resource("src_common_names");
            string ad_organizational_units = json_module.get_external_resource("src_organizational_units");

            ad_obj.get_group_list(ad_server_name, isolat_from_str(ad_common_names, ','), isolat_from_str(ad_organizational_units, '\''), ad_access_userid, ad_access_userpw);

            return(ad_obj);
        }
Example #2
0
        /// <summary>
        /// シリアライズ元データ作成関数
        /// </summary>
        /// <returns></returns>
        private static comparison_table create_comparison_data(DataTable group_list)
        {
            Func <string, string, string> transform_str_to_cug = (string src_str, string account_name_filter) =>
            {
                string trim_str = src_str.Trim(); // 前後の空白を排除
                if (trim_str.Equals(""))
                {
                    return("");
                }

                int all_appear_position = account_name_filter.LastIndexOf('*'); // フィルターでしてした*の出現位置取得
                if (all_appear_position == -1)
                {
                    return("");
                }

                string group_header = account_name_filter.Substring(0, all_appear_position);
                return(group_header + trim_str);
            };

            comparison_table compari_table = new comparison_table();

            active_direcory_module          ad_obj      = get_ad_object();                       // 移動う元ADからグループ情報を取得
            mysql_module                    mysql       = create_mysql_module();
            Dictionary <string, group_info> group_infos = get_group_infos_from_destination_ad(); // 移動先ADから取得したグループ情報の取得
            string ad_account_name_filter = json_module.get_external_resource("dst_account_name_filter");
            string destination_domain     = json_module.get_external_resource("destination_domain");

            if (!destination_domain.Equals(""))
            {
                destination_domain += "\\";
            }

            if ((group_infos == null) || (group_infos.Count == 0))
            {
                loger_manager.write_log("ADからの取得グループ情報がありません", "warning");
                return(null);
            }

            foreach (KeyValuePair <string, group_info> ad_group_membars in ad_obj.groups_list) // 移動元ADから取得したグループ情報を元にループ
            {
                // グループ情報の追加
                string    query_str   = $"Name = '{ad_group_membars.Key}'";
                DataRow[] result_rows = group_list.Select(query_str);
                if (result_rows.Length > 0)
                {
                    foreach (var result_row in result_rows)
                    {
                        try
                        {
                            string          group_name = transform_str_to_cug(result_row["CUGコード"].ToString(), ad_account_name_filter);
                            comparsion_unit unit       = new comparsion_unit();
                            unit.account_name        = ad_group_membars.Value.account_name;
                            unit.conversion_original = ad_group_membars.Value.sid;

                            if (!group_infos.ContainsKey(group_name)) // CUGコードがリソースに設定されてなければ、移行対象外とする
                            {
                                unit.after_conversion = "";
                                unit.del_flg          = 1;
                            }
                            else
                            {
                                unit.after_conversion = destination_domain + group_name;
                            }

                            if (!compari_table.comparsion_units.Contains(unit))
                            {
                                compari_table.comparsion_units.Add(unit);
                            }
                        }
                        catch (Exception e)
                        {
                            loger_manager.write_log(e.Message, "error");
                        }
                    }
                }
                else
                {
                    loger_manager.write_log($"該当するグループ名がありません グループ名: {ad_group_membars.Key}", "extracting", "extracting");
                }

                if (ad_group_membars.Value.group_members.Count == 0)
                {
                    continue;
                }

                // ユーザー毎に追加処理
                foreach (user_info membar_user in ad_group_membars.Value.group_members)
                {
                    try
                    {
                        var users = user_info.get_user_infos(mysql.connection_sql_str(), membar_user.account_name);
                        if ((users == null) || (users.Count == 0))
                        {
                            continue;
                        }

                        comparsion_unit unit = new comparsion_unit(membar_user, users[0], membar_user.sid, destination_domain + users[0].account_name);
                        if (!compari_table.comparsion_units.Contains(unit))
                        {
                            compari_table.comparsion_units.Add(unit);
                        }
                    }
                    catch (Exception e)
                    {
                        loger_manager.write_log(e.Message, "error");
                    }
                }
            }

            compari_table.list_sort(); // 全て格納後、ソートを行う
            return(compari_table);
        }