mirror of
https://github.com/tdurieux/anonymous_github.git
synced 2026-07-07 22:28:01 +02:00
feat: list gh repos in user admin
This commit is contained in:
@@ -1,9 +1,15 @@
|
|||||||
<div class="container page">
|
<div class="container page">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<h1>
|
<h1>
|
||||||
<img ng-src="{{userInfo.photo}}" ng-if="userInfo.photo" width="30" height="30" class="rounded-circle ng-scope">
|
<img
|
||||||
|
ng-src="{{userInfo.photo}}"
|
||||||
|
ng-if="userInfo.photo"
|
||||||
|
width="30"
|
||||||
|
height="30"
|
||||||
|
class="rounded-circle ng-scope"
|
||||||
|
/>
|
||||||
{{userInfo.username}}
|
{{userInfo.username}}
|
||||||
<span class="badge"><span ng-bind="userInfo.status | title"></span>
|
<span class="badge"><span ng-bind="userInfo.status | title"></span></span>
|
||||||
</h1>
|
</h1>
|
||||||
<div class="row mb-3 m-0 py-2 border">
|
<div class="row mb-3 m-0 py-2 border">
|
||||||
<div class="col-2 font-weight-bold">ID</div>
|
<div class="col-2 font-weight-bold">ID</div>
|
||||||
@@ -16,12 +22,47 @@
|
|||||||
<div class="col-10">{{userInfo.accessTokens.github}}</div>
|
<div class="col-10">{{userInfo.accessTokens.github}}</div>
|
||||||
|
|
||||||
<div class="col-2 font-weight-bold">Github</div>
|
<div class="col-2 font-weight-bold">Github</div>
|
||||||
<div class="col-10"><a ng-href="https://github.com/{{userInfo.username}}">{{userInfo.username}}</a></div>
|
<div class="col-10">
|
||||||
|
<a ng-href="https://github.com/{{userInfo.username}}"
|
||||||
|
>{{userInfo.username}}</a
|
||||||
|
>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="col-2 font-weight-bold">Github Repositories</div>
|
<div class="col-2 font-weight-bold">Github Repositories</div>
|
||||||
<div class="col-10">{{userInfo.repositories.length}}</a></div>
|
<div class="col-10" ng-click="showRepos =!showRepos">
|
||||||
|
{{userInfo.repositories.length}}
|
||||||
|
</div>
|
||||||
|
<button
|
||||||
|
class="btn btn-primary m-1 mx-3"
|
||||||
|
ng-click="getGitHubRepositories()"
|
||||||
|
>
|
||||||
|
Regresh Repositories
|
||||||
|
</button>
|
||||||
|
<ul class="m-0 col-12" ng-if="showRepos">
|
||||||
|
<li
|
||||||
|
class="col-12 d-flex px-0 py-3 border-bottom color-border-secondary"
|
||||||
|
ng-repeat="repo in userInfo.repositories"
|
||||||
|
>
|
||||||
|
<div class="w-100">
|
||||||
|
<div class="">
|
||||||
|
{{repo.name}}
|
||||||
|
</div>
|
||||||
|
<div class="color-text-secondary mt-2">
|
||||||
|
<span
|
||||||
|
class="ml-0 mr-3"
|
||||||
|
title="Size: {{::repo.size | humanFileSize}}"
|
||||||
|
data-toggle="tooltip"
|
||||||
|
data-placement="bottom"
|
||||||
|
>
|
||||||
|
<i class="fas fa-database"></i> {{::repo.size |
|
||||||
|
humanFileSize}}</span
|
||||||
|
>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<h3>Repositories {{repositories.length}}</h3>
|
<h3>Repositories {{repositories.length}}</h3>
|
||||||
<div class="border-bottom color-border-secondary py-3 w-100">
|
<div class="border-bottom color-border-secondary py-3 w-100">
|
||||||
<div class="d-flex flex-items-start w-100">
|
<div class="d-flex flex-items-start w-100">
|
||||||
|
|||||||
@@ -231,6 +231,16 @@ angular
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
$scope.getGitHubRepositories = (force) => {
|
||||||
|
$http
|
||||||
|
.get(`/api/user/${$scope.userInfo.username}/all_repositories`, {
|
||||||
|
params: { force: "1" },
|
||||||
|
})
|
||||||
|
.then((res) => {
|
||||||
|
$scope.userInfo.repositories = res.data;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
let timeClear = null;
|
let timeClear = null;
|
||||||
$scope.$watch(
|
$scope.$watch(
|
||||||
"query",
|
"query",
|
||||||
|
|||||||
@@ -19,7 +19,12 @@ const UserSchema = new Schema({
|
|||||||
],
|
],
|
||||||
isAdmin: { type: Boolean, default: false },
|
isAdmin: { type: Boolean, default: false },
|
||||||
photo: String,
|
photo: String,
|
||||||
repositories: [String],
|
repositories: [
|
||||||
|
{
|
||||||
|
type: String,
|
||||||
|
ref: "Repository",
|
||||||
|
},
|
||||||
|
],
|
||||||
default: {
|
default: {
|
||||||
terms: [String],
|
terms: [String],
|
||||||
options: {
|
options: {
|
||||||
|
|||||||
+9
-1
@@ -9,6 +9,7 @@ import Repository from "../Repository";
|
|||||||
import User from "../User";
|
import User from "../User";
|
||||||
import { ensureAuthenticated } from "./connection";
|
import { ensureAuthenticated } from "./connection";
|
||||||
import { handleError, getUser, isOwnerOrAdmin, getRepo } from "./route-utils";
|
import { handleError, getUser, isOwnerOrAdmin, getRepo } from "./route-utils";
|
||||||
|
import RepositoryModel from "../database/repositories/repositories.model";
|
||||||
|
|
||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
|
|
||||||
@@ -206,7 +207,14 @@ router.get(
|
|||||||
"/users/:username",
|
"/users/:username",
|
||||||
async (req: express.Request, res: express.Response) => {
|
async (req: express.Request, res: express.Response) => {
|
||||||
try {
|
try {
|
||||||
const model = await UserModel.findOne({ username: req.params.username });
|
const model = await UserModel.findOne({
|
||||||
|
username: req.params.username,
|
||||||
|
}).populate({
|
||||||
|
path: "repositories",
|
||||||
|
model: "Repository",
|
||||||
|
foreignField: "_id",
|
||||||
|
localField: "repositories",
|
||||||
|
});
|
||||||
if (!model) {
|
if (!model) {
|
||||||
req.logout((error) => console.error(error));
|
req.logout((error) => console.error(error));
|
||||||
throw new AnonymousError("user_not_found", {
|
throw new AnonymousError("user_not_found", {
|
||||||
|
|||||||
+32
-12
@@ -1,7 +1,9 @@
|
|||||||
import * as express from "express";
|
import * as express from "express";
|
||||||
import config from "../../config";
|
import config from "../../config";
|
||||||
import { ensureAuthenticated } from "./connection";
|
import { ensureAuthenticated } from "./connection";
|
||||||
import { handleError, getUser } from "./route-utils";
|
import { handleError, getUser, isOwnerOrAdmin } from "./route-utils";
|
||||||
|
import UserModel from "../database/users/users.model";
|
||||||
|
import User from "../User";
|
||||||
|
|
||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
|
|
||||||
@@ -117,22 +119,40 @@ router.get(
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
async function getAllRepositories(user: User, force: boolean) {
|
||||||
|
const repos = await user.getGitHubRepositories({
|
||||||
|
force,
|
||||||
|
});
|
||||||
|
return repos.map((x) => {
|
||||||
|
return {
|
||||||
|
fullName: x.fullName,
|
||||||
|
id: x.id,
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
router.get(
|
router.get(
|
||||||
"/all_repositories",
|
"/all_repositories",
|
||||||
async (req: express.Request, res: express.Response) => {
|
async (req: express.Request, res: express.Response) => {
|
||||||
try {
|
try {
|
||||||
const user = await getUser(req);
|
const user = await getUser(req);
|
||||||
const repos = await user.getGitHubRepositories({
|
res.json(await getAllRepositories(user, req.query.force == "1"));
|
||||||
force: req.query.force == "1",
|
} catch (error) {
|
||||||
});
|
handleError(error, res, req);
|
||||||
res.json(
|
}
|
||||||
repos.map((x) => {
|
}
|
||||||
return {
|
);
|
||||||
fullName: x.fullName,
|
router.get(
|
||||||
id: x.id,
|
"/:username/all_repositories",
|
||||||
};
|
async (req: express.Request, res: express.Response) => {
|
||||||
})
|
try {
|
||||||
);
|
const loggedUser = await getUser(req);
|
||||||
|
isOwnerOrAdmin([req.params.username], loggedUser);
|
||||||
|
const model = await UserModel.findOne({ username: req.params.username });
|
||||||
|
if (!model) {
|
||||||
|
throw new Error("User not found");
|
||||||
|
}
|
||||||
|
const user = new User(model);
|
||||||
|
res.json(await getAllRepositories(user, req.query.force == "1"));
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
handleError(error, res, req);
|
handleError(error, res, req);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user