Skip to content
  • Or simply run this script in the browser console after loggin in to harbor (no manual copy of authorization/csrf headers neccesary):

    await (async (user) => {
      let page = 0;
      let repos;
      do {
        page++;
        const reposResponse = await fetch(`https://harbor.akdb.de/api/v2.0/projects?page=${page}&page_size=100`);
        const csrfToken = reposResponse.headers.get('x-harbor-csrf-token');
        repos = (await reposResponse.json()).map(repo => repo.name).filter((repo) => !['library'].includes(repo));
        await Promise.all(repos.map((repo) => {
          return fetch(`https://harbor.akdb.de/api/v2.0/projects/${repo}/members`, {
            method: "POST",
            headers: {
              "Content-Type": "application/json",
              "accept": "application/json",
              "X-Harbor-CSRF-Token": csrfToken,
            },
            body: JSON.stringify({
              "role_id": 2,
              "member_user": {
                "username": user,
              },
            }),
          });
        }));
      } while (repos.length > 0);
    })('m.mustermann');
    Edited by Josef Reichardt
  • This snippet can be used to copy members (and their roles) from one project to another. Run this script in the browser console after logging in to harbor:

    const projectSource = 'ozg-meldewesen';
    const projectTarget = 'ozg-finanzwesen';
    
    await (async (projectSource, projectTarget) => {
        let page = 0;
        let members;
        do {
            page++;
            const membersResponse = await fetch(`https://harbor.akdb.de/api/v2.0/projects/${projectSource}/members?page=${page}&page_size=50`);
            const csrfToken = membersResponse.headers.get('x-harbor-csrf-token');
            members = (await membersResponse.json());
            await Promise.all(members.map((entity) => {
                return fetch(`https://harbor.akdb.de/api/v2.0/projects/${projectTarget}/members`, {
                    method: "POST",
                    headers: {
                        "Content-Type": "application/json",
                        "accept": "application/json",
                        "X-Harbor-CSRF-Token": csrfToken,
                    },
                    body: JSON.stringify({
                        "role_id": entity.role_id,
                        "member_user": {
                            "user_id": entity.entity_id,
                        }
                    })
                });
            }));
        } while (members.length > 0);
    })(projectSource, projectTarget);
    Edited by Gabriel Cordes
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment