@sync-in/server
Version:
The secure, open-source platform for file storage, sharing, collaboration, and sync
436 lines (435 loc) • 21.9 kB
JavaScript
/*
* Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
* This file is part of Sync-in | The open source file sync and share solution
* See the LICENSE file for licensing details
*/ "use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "UsersController", {
enumerable: true,
get: function() {
return UsersController;
}
});
const _common = require("@nestjs/common");
const _fs = require("fs");
const _authtwofaguard = require("../../authentication/guards/auth-two-fa-guard");
const _authrequestinterface = require("../../authentication/interfaces/auth-request.interface");
const _sendfile = require("../files/utils/send-file");
const _routes = require("./constants/routes");
const _user = require("./constants/user");
const _permissionsdecorator = require("./decorators/permissions.decorator");
const _rolesdecorator = require("./decorators/roles.decorator");
const _userdecorator = require("./decorators/user.decorator");
const _createorupdategroupdto = require("./dto/create-or-update-group.dto");
const _createorupdateuserdto = require("./dto/create-or-update-user.dto");
const _searchmembersdto = require("./dto/search-members.dto");
const _userpropertiesdto = require("./dto/user-properties.dto");
const _permissionsguard = require("./guards/permissions.guard");
const _rolesguard = require("./guards/roles.guard");
const _usermodel = require("./models/user.model");
const _usersmanagerservice = require("./services/users-manager.service");
const _avatar = require("./utils/avatar");
function _ts_decorate(decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
}
function _ts_metadata(k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
}
function _ts_param(paramIndex, decorator) {
return function(target, key) {
decorator(target, key, paramIndex);
};
}
let UsersController = class UsersController {
me(user) {
return this.usersManager.me(user);
}
listAppPasswords(user) {
return this.usersManager.listAppPasswords(user);
}
generateAppPassword(user, userAppPasswordDto) {
return this.usersManager.generateAppPassword(user, userAppPasswordDto);
}
deleteAppPassword(user, name) {
return this.usersManager.deleteAppPassword(user, name);
}
updateLanguage(user, userLanguageDto) {
return this.usersManager.updateLanguage(user, userLanguageDto);
}
updatePassword(user, userPasswordDto) {
return this.usersManager.updatePassword(user, userPasswordDto);
}
updateNotification(user, userNotificationDto) {
return this.usersManager.updateNotification(user, userNotificationDto);
}
updateStorageIndexing(user, userStorageIndexingDto) {
return this.usersManager.updateStorageIndexing(user, userStorageIndexingDto);
}
async avatar(user, login) {
const isMe = login === 'me';
const [path, mime] = await this.usersManager.getAvatar(isMe ? user.login : login, false, isMe && user.role <= _user.USER_ROLE.USER);
return new _common.StreamableFile((0, _fs.createReadStream)(path), {
type: mime,
disposition: (0, _sendfile.makeContentDispositionAttachment)(_avatar.USER_AVATAR_FILE_NAME)
});
}
updateAvatar(req) {
return this.usersManager.updateAvatar(req);
}
genAvatar(user) {
return this.usersManager.getAvatar(user.login, true);
}
searchMembers(user, searchMembersDto) {
return this.usersManager.searchMembers(user, searchMembersDto);
}
browseGroups(user, name) {
return this.usersManager.browseGroups(user, name);
}
createPersonalGroup(user, userCreateOrUpdateGroupDto) {
return this.usersManager.createPersonalGroup(user, userCreateOrUpdateGroupDto);
}
updatePersonalGroup(user, groupId, userCreateOrUpdateGroupDto) {
return this.usersManager.updatePersonalGroup(user, groupId, userCreateOrUpdateGroupDto);
}
deletePersonalGroup(user, groupId) {
return this.usersManager.deletePersonalGroup(user, groupId);
}
leavePersonalGroup(user, groupId) {
return this.usersManager.leavePersonalGroup(user, groupId);
}
addUsersToGroup(user, groupId, userIds) {
return this.usersManager.addUsersToGroup(user, groupId, userIds);
}
removeUserFromGroup(user, groupId, userId) {
return this.usersManager.removeUserFromGroup(user, groupId, userId);
}
updateUserFromPersonalGroup(user, groupId, userId, updateUserFromGroupDto) {
return this.usersManager.updateUserFromPersonalGroup(user, groupId, userId, updateUserFromGroupDto);
}
listGuests(user) {
return this.usersManager.listGuests(user);
}
getGuest(user, guestId) {
return this.usersManager.getGuest(user, guestId);
}
createGuest(user, createGuestDto) {
return this.usersManager.createGuest(user, createGuestDto);
}
updateGuest(user, guestId, updateGuestDto) {
return this.usersManager.updateGuest(user, guestId, updateGuestDto);
}
deleteGuest(user, guestId) {
return this.usersManager.deleteGuest(user, guestId);
}
constructor(usersManager){
this.usersManager = usersManager;
}
};
_ts_decorate([
(0, _common.Get)(_routes.USERS_ROUTE.ME),
(0, _rolesdecorator.UserHaveRole)(_user.USER_ROLE.LINK),
_ts_param(0, (0, _userdecorator.GetUser)()),
_ts_metadata("design:type", Function),
_ts_metadata("design:paramtypes", [
typeof _usermodel.UserModel === "undefined" ? Object : _usermodel.UserModel
]),
_ts_metadata("design:returntype", typeof Promise === "undefined" ? Object : Promise)
], UsersController.prototype, "me", null);
_ts_decorate([
(0, _common.Get)(`${_routes.USERS_ROUTE.ME}/${_routes.USERS_ROUTE.APP_PASSWORDS}`),
(0, _rolesdecorator.UserHaveRole)(_user.USER_ROLE.USER),
(0, _common.UseGuards)(_authtwofaguard.AuthTwoFaGuardWithoutPassword),
_ts_param(0, (0, _userdecorator.GetUser)()),
_ts_metadata("design:type", Function),
_ts_metadata("design:paramtypes", [
typeof _usermodel.UserModel === "undefined" ? Object : _usermodel.UserModel
]),
_ts_metadata("design:returntype", typeof Promise === "undefined" ? Object : Promise)
], UsersController.prototype, "listAppPasswords", null);
_ts_decorate([
(0, _common.Post)(`${_routes.USERS_ROUTE.ME}/${_routes.USERS_ROUTE.APP_PASSWORDS}`),
(0, _rolesdecorator.UserHaveRole)(_user.USER_ROLE.USER),
(0, _common.UseGuards)(_authtwofaguard.AuthTwoFaGuardWithoutPassword),
_ts_param(0, (0, _userdecorator.GetUser)()),
_ts_param(1, (0, _common.Body)()),
_ts_metadata("design:type", Function),
_ts_metadata("design:paramtypes", [
typeof _usermodel.UserModel === "undefined" ? Object : _usermodel.UserModel,
typeof _userpropertiesdto.UserAppPasswordDto === "undefined" ? Object : _userpropertiesdto.UserAppPasswordDto
]),
_ts_metadata("design:returntype", typeof Promise === "undefined" ? Object : Promise)
], UsersController.prototype, "generateAppPassword", null);
_ts_decorate([
(0, _common.Delete)(`${_routes.USERS_ROUTE.ME}/${_routes.USERS_ROUTE.APP_PASSWORDS}/:name`),
(0, _rolesdecorator.UserHaveRole)(_user.USER_ROLE.USER),
_ts_param(0, (0, _userdecorator.GetUser)()),
_ts_param(1, (0, _common.Param)('name')),
_ts_metadata("design:type", Function),
_ts_metadata("design:paramtypes", [
typeof _usermodel.UserModel === "undefined" ? Object : _usermodel.UserModel,
String
]),
_ts_metadata("design:returntype", typeof Promise === "undefined" ? Object : Promise)
], UsersController.prototype, "deleteAppPassword", null);
_ts_decorate([
(0, _common.Put)(`${_routes.USERS_ROUTE.ME}/${_routes.USERS_ROUTE.LANGUAGE}`),
(0, _rolesdecorator.UserHaveRole)(_user.USER_ROLE.GUEST),
_ts_param(0, (0, _userdecorator.GetUser)()),
_ts_param(1, (0, _common.Body)()),
_ts_metadata("design:type", Function),
_ts_metadata("design:paramtypes", [
typeof _usermodel.UserModel === "undefined" ? Object : _usermodel.UserModel,
typeof _userpropertiesdto.UserLanguageDto === "undefined" ? Object : _userpropertiesdto.UserLanguageDto
]),
_ts_metadata("design:returntype", void 0)
], UsersController.prototype, "updateLanguage", null);
_ts_decorate([
(0, _common.Put)(`${_routes.USERS_ROUTE.ME}/${_routes.USERS_ROUTE.PASSWORD}`),
(0, _common.UseGuards)(_authtwofaguard.AuthTwoFaGuardWithoutPassword),
_ts_param(0, (0, _userdecorator.GetUser)()),
_ts_param(1, (0, _common.Body)()),
_ts_metadata("design:type", Function),
_ts_metadata("design:paramtypes", [
typeof _usermodel.UserModel === "undefined" ? Object : _usermodel.UserModel,
typeof _userpropertiesdto.UserUpdatePasswordDto === "undefined" ? Object : _userpropertiesdto.UserUpdatePasswordDto
]),
_ts_metadata("design:returntype", void 0)
], UsersController.prototype, "updatePassword", null);
_ts_decorate([
(0, _common.Put)(`${_routes.USERS_ROUTE.ME}/${_routes.USERS_ROUTE.NOTIFICATION}`),
(0, _rolesdecorator.UserHaveRole)(_user.USER_ROLE.GUEST),
_ts_param(0, (0, _userdecorator.GetUser)()),
_ts_param(1, (0, _common.Body)()),
_ts_metadata("design:type", Function),
_ts_metadata("design:paramtypes", [
typeof _usermodel.UserModel === "undefined" ? Object : _usermodel.UserModel,
typeof _userpropertiesdto.UserNotificationDto === "undefined" ? Object : _userpropertiesdto.UserNotificationDto
]),
_ts_metadata("design:returntype", void 0)
], UsersController.prototype, "updateNotification", null);
_ts_decorate([
(0, _common.Put)(`${_routes.USERS_ROUTE.ME}/${_routes.USERS_ROUTE.STORAGE_INDEXING}`),
(0, _rolesdecorator.UserHaveRole)(_user.USER_ROLE.USER),
_ts_param(0, (0, _userdecorator.GetUser)()),
_ts_param(1, (0, _common.Body)()),
_ts_metadata("design:type", Function),
_ts_metadata("design:paramtypes", [
typeof _usermodel.UserModel === "undefined" ? Object : _usermodel.UserModel,
typeof _userpropertiesdto.UserStorageIndexingDto === "undefined" ? Object : _userpropertiesdto.UserStorageIndexingDto
]),
_ts_metadata("design:returntype", void 0)
], UsersController.prototype, "updateStorageIndexing", null);
_ts_decorate([
(0, _common.Get)(`${_routes.USERS_ROUTE.AVATAR}/:login`),
(0, _rolesdecorator.UserHaveRole)(_user.USER_ROLE.LINK),
(0, _common.Header)('cache-control', 'public,max-age=86400'),
_ts_param(0, (0, _userdecorator.GetUser)()),
_ts_param(1, (0, _common.Param)('login')),
_ts_metadata("design:type", Function),
_ts_metadata("design:paramtypes", [
typeof _usermodel.UserModel === "undefined" ? Object : _usermodel.UserModel,
String
]),
_ts_metadata("design:returntype", Promise)
], UsersController.prototype, "avatar", null);
_ts_decorate([
(0, _common.Put)(`${_routes.USERS_ROUTE.ME}/${_routes.USERS_ROUTE.AVATAR}`),
_ts_param(0, (0, _common.Req)()),
_ts_metadata("design:type", Function),
_ts_metadata("design:paramtypes", [
typeof _authrequestinterface.FastifyAuthenticatedRequest === "undefined" ? Object : _authrequestinterface.FastifyAuthenticatedRequest
]),
_ts_metadata("design:returntype", void 0)
], UsersController.prototype, "updateAvatar", null);
_ts_decorate([
(0, _common.Patch)(`${_routes.USERS_ROUTE.ME}/${_routes.USERS_ROUTE.AVATAR}`),
_ts_param(0, (0, _userdecorator.GetUser)()),
_ts_metadata("design:type", Function),
_ts_metadata("design:paramtypes", [
typeof _usermodel.UserModel === "undefined" ? Object : _usermodel.UserModel
]),
_ts_metadata("design:returntype", void 0)
], UsersController.prototype, "genAvatar", null);
_ts_decorate([
(0, _common.Search)(),
_ts_param(0, (0, _userdecorator.GetUser)()),
_ts_param(1, (0, _common.Body)()),
_ts_metadata("design:type", Function),
_ts_metadata("design:paramtypes", [
typeof _usermodel.UserModel === "undefined" ? Object : _usermodel.UserModel,
typeof _searchmembersdto.SearchMembersDto === "undefined" ? Object : _searchmembersdto.SearchMembersDto
]),
_ts_metadata("design:returntype", typeof Promise === "undefined" ? Object : Promise)
], UsersController.prototype, "searchMembers", null);
_ts_decorate([
(0, _common.Get)(`${_routes.USERS_ROUTE.ME}/${_routes.USERS_ROUTE.GROUPS}/${_routes.USERS_ROUTE.BROWSE}/:name?`),
_ts_param(0, (0, _userdecorator.GetUser)()),
_ts_param(1, (0, _common.Param)('name')),
_ts_metadata("design:type", Function),
_ts_metadata("design:paramtypes", [
typeof _usermodel.UserModel === "undefined" ? Object : _usermodel.UserModel,
String
]),
_ts_metadata("design:returntype", typeof Promise === "undefined" ? Object : Promise)
], UsersController.prototype, "browseGroups", null);
_ts_decorate([
(0, _common.Post)(`${_routes.USERS_ROUTE.ME}/${_routes.USERS_ROUTE.GROUPS}`),
(0, _permissionsdecorator.UserHavePermission)(_user.USER_PERMISSION.PERSONAL_GROUPS_ADMIN),
(0, _common.UseGuards)(_permissionsguard.UserPermissionsGuard),
_ts_param(0, (0, _userdecorator.GetUser)()),
_ts_param(1, (0, _common.Body)()),
_ts_metadata("design:type", Function),
_ts_metadata("design:paramtypes", [
typeof _usermodel.UserModel === "undefined" ? Object : _usermodel.UserModel,
typeof _createorupdategroupdto.UserCreateOrUpdateGroupDto === "undefined" ? Object : _createorupdategroupdto.UserCreateOrUpdateGroupDto
]),
_ts_metadata("design:returntype", typeof Promise === "undefined" ? Object : Promise)
], UsersController.prototype, "createPersonalGroup", null);
_ts_decorate([
(0, _common.Put)(`${_routes.USERS_ROUTE.ME}/${_routes.USERS_ROUTE.GROUPS}/:id`),
_ts_param(0, (0, _userdecorator.GetUser)()),
_ts_param(1, (0, _common.Param)('id', _common.ParseIntPipe)),
_ts_param(2, (0, _common.Body)()),
_ts_metadata("design:type", Function),
_ts_metadata("design:paramtypes", [
typeof _usermodel.UserModel === "undefined" ? Object : _usermodel.UserModel,
Number,
typeof _createorupdategroupdto.UserCreateOrUpdateGroupDto === "undefined" ? Object : _createorupdategroupdto.UserCreateOrUpdateGroupDto
]),
_ts_metadata("design:returntype", typeof Promise === "undefined" ? Object : Promise)
], UsersController.prototype, "updatePersonalGroup", null);
_ts_decorate([
(0, _common.Delete)(`${_routes.USERS_ROUTE.ME}/${_routes.USERS_ROUTE.GROUPS}/:id`),
_ts_param(0, (0, _userdecorator.GetUser)()),
_ts_param(1, (0, _common.Param)('id', _common.ParseIntPipe)),
_ts_metadata("design:type", Function),
_ts_metadata("design:paramtypes", [
typeof _usermodel.UserModel === "undefined" ? Object : _usermodel.UserModel,
Number
]),
_ts_metadata("design:returntype", typeof Promise === "undefined" ? Object : Promise)
], UsersController.prototype, "deletePersonalGroup", null);
_ts_decorate([
(0, _common.Delete)(`${_routes.USERS_ROUTE.ME}/${_routes.USERS_ROUTE.GROUPS}/${_routes.USERS_ROUTE.GROUPS_LEAVE}/:id`),
_ts_param(0, (0, _userdecorator.GetUser)()),
_ts_param(1, (0, _common.Param)('id', _common.ParseIntPipe)),
_ts_metadata("design:type", Function),
_ts_metadata("design:paramtypes", [
typeof _usermodel.UserModel === "undefined" ? Object : _usermodel.UserModel,
Number
]),
_ts_metadata("design:returntype", typeof Promise === "undefined" ? Object : Promise)
], UsersController.prototype, "leavePersonalGroup", null);
_ts_decorate([
(0, _common.Patch)(`${_routes.USERS_ROUTE.ME}/${_routes.USERS_ROUTE.GROUPS}/:groupId/${_routes.USERS_ROUTE.USERS}`),
_ts_param(0, (0, _userdecorator.GetUser)()),
_ts_param(1, (0, _common.Param)('groupId', _common.ParseIntPipe)),
_ts_param(2, (0, _common.Body)()),
_ts_metadata("design:type", Function),
_ts_metadata("design:paramtypes", [
typeof _usermodel.UserModel === "undefined" ? Object : _usermodel.UserModel,
Number,
Array
]),
_ts_metadata("design:returntype", typeof Promise === "undefined" ? Object : Promise)
], UsersController.prototype, "addUsersToGroup", null);
_ts_decorate([
(0, _common.Delete)(`${_routes.USERS_ROUTE.ME}/${_routes.USERS_ROUTE.GROUPS}/:groupId/${_routes.USERS_ROUTE.USERS}/:userId`),
_ts_param(0, (0, _userdecorator.GetUser)()),
_ts_param(1, (0, _common.Param)('groupId', _common.ParseIntPipe)),
_ts_param(2, (0, _common.Param)('userId', _common.ParseIntPipe)),
_ts_metadata("design:type", Function),
_ts_metadata("design:paramtypes", [
typeof _usermodel.UserModel === "undefined" ? Object : _usermodel.UserModel,
Number,
Number
]),
_ts_metadata("design:returntype", typeof Promise === "undefined" ? Object : Promise)
], UsersController.prototype, "removeUserFromGroup", null);
_ts_decorate([
(0, _common.Patch)(`${_routes.USERS_ROUTE.ME}/${_routes.USERS_ROUTE.GROUPS}/:groupId/${_routes.USERS_ROUTE.USERS}/:userId`),
_ts_param(0, (0, _userdecorator.GetUser)()),
_ts_param(1, (0, _common.Param)('groupId', _common.ParseIntPipe)),
_ts_param(2, (0, _common.Param)('userId', _common.ParseIntPipe)),
_ts_param(3, (0, _common.Body)()),
_ts_metadata("design:type", Function),
_ts_metadata("design:paramtypes", [
typeof _usermodel.UserModel === "undefined" ? Object : _usermodel.UserModel,
Number,
Number,
typeof _createorupdateuserdto.UpdateUserFromGroupDto === "undefined" ? Object : _createorupdateuserdto.UpdateUserFromGroupDto
]),
_ts_metadata("design:returntype", typeof Promise === "undefined" ? Object : Promise)
], UsersController.prototype, "updateUserFromPersonalGroup", null);
_ts_decorate([
(0, _common.Get)(`${_routes.USERS_ROUTE.ME}/${_routes.USERS_ROUTE.GUESTS}`),
_ts_param(0, (0, _userdecorator.GetUser)()),
_ts_metadata("design:type", Function),
_ts_metadata("design:paramtypes", [
typeof _usermodel.UserModel === "undefined" ? Object : _usermodel.UserModel
]),
_ts_metadata("design:returntype", typeof Promise === "undefined" ? Object : Promise)
], UsersController.prototype, "listGuests", null);
_ts_decorate([
(0, _common.Get)(`${_routes.USERS_ROUTE.ME}/${_routes.USERS_ROUTE.GUESTS}/:id`),
_ts_param(0, (0, _userdecorator.GetUser)()),
_ts_param(1, (0, _common.Param)('id', _common.ParseIntPipe)),
_ts_metadata("design:type", Function),
_ts_metadata("design:paramtypes", [
typeof _usermodel.UserModel === "undefined" ? Object : _usermodel.UserModel,
Number
]),
_ts_metadata("design:returntype", typeof Promise === "undefined" ? Object : Promise)
], UsersController.prototype, "getGuest", null);
_ts_decorate([
(0, _common.Post)(`${_routes.USERS_ROUTE.ME}/${_routes.USERS_ROUTE.GUESTS}`),
(0, _permissionsdecorator.UserHavePermission)(_user.USER_PERMISSION.GUESTS_ADMIN),
(0, _common.UseGuards)(_permissionsguard.UserPermissionsGuard),
_ts_param(0, (0, _userdecorator.GetUser)()),
_ts_param(1, (0, _common.Body)()),
_ts_metadata("design:type", Function),
_ts_metadata("design:paramtypes", [
typeof _usermodel.UserModel === "undefined" ? Object : _usermodel.UserModel,
typeof _createorupdateuserdto.CreateUserDto === "undefined" ? Object : _createorupdateuserdto.CreateUserDto
]),
_ts_metadata("design:returntype", typeof Promise === "undefined" ? Object : Promise)
], UsersController.prototype, "createGuest", null);
_ts_decorate([
(0, _common.Put)(`${_routes.USERS_ROUTE.ME}/${_routes.USERS_ROUTE.GUESTS}/:id`),
_ts_param(0, (0, _userdecorator.GetUser)()),
_ts_param(1, (0, _common.Param)('id', _common.ParseIntPipe)),
_ts_param(2, (0, _common.Body)()),
_ts_metadata("design:type", Function),
_ts_metadata("design:paramtypes", [
typeof _usermodel.UserModel === "undefined" ? Object : _usermodel.UserModel,
Number,
typeof _createorupdateuserdto.UpdateUserDto === "undefined" ? Object : _createorupdateuserdto.UpdateUserDto
]),
_ts_metadata("design:returntype", typeof Promise === "undefined" ? Object : Promise)
], UsersController.prototype, "updateGuest", null);
_ts_decorate([
(0, _common.Delete)(`${_routes.USERS_ROUTE.ME}/${_routes.USERS_ROUTE.GUESTS}/:id`),
_ts_param(0, (0, _userdecorator.GetUser)()),
_ts_param(1, (0, _common.Param)('id', _common.ParseIntPipe)),
_ts_metadata("design:type", Function),
_ts_metadata("design:paramtypes", [
typeof _usermodel.UserModel === "undefined" ? Object : _usermodel.UserModel,
Number
]),
_ts_metadata("design:returntype", typeof Promise === "undefined" ? Object : Promise)
], UsersController.prototype, "deleteGuest", null);
UsersController = _ts_decorate([
(0, _common.Controller)(_routes.USERS_ROUTE.BASE),
(0, _common.UseGuards)(_rolesguard.UserRolesGuard),
(0, _rolesdecorator.UserHaveRole)(_user.USER_ROLE.USER),
_ts_metadata("design:type", Function),
_ts_metadata("design:paramtypes", [
typeof _usersmanagerservice.UsersManager === "undefined" ? Object : _usersmanagerservice.UsersManager
])
], UsersController);
//# sourceMappingURL=users.controller.js.map