Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor: Proxyアカウントをシステムアカウントにしてわかりやすくした #15026

Open
wants to merge 9 commits into
base: develop
Choose a base branch
from

Conversation

sakuhanight
Copy link
Contributor

What

  • ProxyAccountシステムアカウントとして作成するようにした
  • システムアカウントのプロフィールページにシステムアカウントであることを明示
  • ProxyAccountの編集用にadmin/update-proxy-accountエンドポイントを追加
  • ProxyAccountの設定画面でアバター、バナー、名前、概要を編集可能にした

Why

#14857

  • Proxyアカウントがシステムアカウント的立場でありながら、ログインすることが必要となっており、フォロワー限定投稿を見れてしまう問題があった。
  • Proxyアカウントを示すフラグはない(metaにはidが乗っているが、一般人は見ない)ため、成りすましが可能だった。

Additional info (optional)

Checklist

  • Read the contribution guide
  • Test working in a local environment
  • (If needed) Add story of storybook
  • (If needed) Update CHANGELOG.md
  • (If possible) Add tests

@github-actions github-actions bot added packages/frontend Client side specific issue/PR packages/backend Server side specific issue/PR packages/misskey-js labels Nov 22, 2024
Copy link

codecov bot commented Nov 22, 2024

Codecov Report

Attention: Patch coverage is 37.22222% with 339 lines in your changes missing coverage. Please review.

Project coverage is 41.64%. Comparing base (71bfa85) to head (be219d2).
Report is 2 commits behind head on develop.

Files with missing lines Patch % Lines
...server/api/endpoints/admin/update-proxy-account.ts 43.90% 198 Missing ⚠️
packages/frontend/src/pages/admin/settings.vue 0.00% 122 Missing ⚠️
packages/backend/src/core/ProxyAccountService.ts 38.70% 19 Missing ⚠️
Additional details and impacted files
@@             Coverage Diff             @@
##           develop   #15026      +/-   ##
===========================================
+ Coverage    39.96%   41.64%   +1.67%     
===========================================
  Files         1563     1568       +5     
  Lines       197741   204053    +6312     
  Branches      3631     3699      +68     
===========================================
+ Hits         79027    84973    +5946     
- Misses      118109   118475     +366     
  Partials       605      605              

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.


🚨 Try these New Features:

Copy link
Contributor

github-actions bot commented Nov 22, 2024

このPRによるapi.jsonの差分

差分はこちら
--- base
+++ head
@@ -4896,6 +4896,303 @@
         }
       }
     },
+    "/admin/update-proxy-account": {
+      "post": {
+        "operationId": "admin___update-proxy-account",
+        "summary": "admin/update-proxy-account",
+        "description": "No description provided.\n\n**Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties.\n**Credential required**: *Yes* / **Permission**: *write:admin:update-proxy-account*",
+        "externalDocs": {
+          "description": "Source code",
+          "url": "https://github.com/misskey-dev/misskey/blob/develop/packages/backend/src/server/api/endpoints/admin/update-proxy-account.ts"
+        },
+        "tags": [
+          "admin"
+        ],
+        "security": [
+          {
+            "bearerAuth": []
+          }
+        ],
+        "requestBody": {
+          "required": true,
+          "content": {
+            "application/json": {
+              "schema": {
+                "type": "object",
+                "properties": {
+                  "name": {
+                    "type": [
+                      "string",
+                      "null"
+                    ],
+                    "minLength": 1,
+                    "maxLength": 50
+                  },
+                  "description": {
+                    "type": [
+                      "string",
+                      "null"
+                    ],
+                    "minLength": 1,
+                    "maxLength": 1500
+                  },
+                  "avatarId": {
+                    "type": [
+                      "string",
+                      "null"
+                    ],
+                    "format": "misskey:id"
+                  },
+                  "bannerId": {
+                    "type": [
+                      "string",
+                      "null"
+                    ],
+                    "format": "misskey:id"
+                  }
+                }
+              }
+            }
+          }
+        },
+        "responses": {
+          "200": {
+            "description": "OK (with results)",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "type": "object",
+                  "$ref": "#/components/schemas/UserDetailed"
+                }
+              }
+            }
+          },
+          "400": {
+            "description": "Client error",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/Error"
+                },
+                "examples": {
+                  "NO_SUCH_AVATAR": {
+                    "value": {
+                      "error": {
+                        "message": "No such avatar file.",
+                        "code": "NO_SUCH_AVATAR",
+                        "id": "539f3a45-f215-4f81-a9a8-31293640207f"
+                      }
+                    }
+                  },
+                  "NO_SUCH_BANNER": {
+                    "value": {
+                      "error": {
+                        "message": "No such banner file.",
+                        "code": "NO_SUCH_BANNER",
+                        "id": "0d8f5629-f210-41c2-9433-735831a58595"
+                      }
+                    }
+                  },
+                  "AVATAR_NOT_AN_IMAGE": {
+                    "value": {
+                      "error": {
+                        "message": "The file specified as an avatar is not an image.",
+                        "code": "AVATAR_NOT_AN_IMAGE",
+                        "id": "f419f9f8-2f4d-46b1-9fb4-49d3a2fd7191"
+                      }
+                    }
+                  },
+                  "BANNER_NOT_AN_IMAGE": {
+                    "value": {
+                      "error": {
+                        "message": "The file specified as a banner is not an image.",
+                        "code": "BANNER_NOT_AN_IMAGE",
+                        "id": "75aedb19-2afd-4e6d-87fc-67941256fa60"
+                      }
+                    }
+                  },
+                  "NO_SUCH_PAGE": {
+                    "value": {
+                      "error": {
+                        "message": "No such page.",
+                        "code": "NO_SUCH_PAGE",
+                        "id": "8e01b590-7eb9-431b-a239-860e086c408e"
+                      }
+                    }
+                  },
+                  "INVALID_REGEXP": {
+                    "value": {
+                      "error": {
+                        "message": "Invalid Regular Expression.",
+                        "code": "INVALID_REGEXP",
+                        "id": "0d786918-10df-41cd-8f33-8dec7d9a89a5"
+                      }
+                    }
+                  },
+                  "TOO_MANY_MUTED_WORDS": {
+                    "value": {
+                      "error": {
+                        "message": "Too many muted words.",
+                        "code": "TOO_MANY_MUTED_WORDS",
+                        "id": "010665b1-a211-42d2-bc64-8f6609d79785"
+                      }
+                    }
+                  },
+                  "NO_SUCH_USER": {
+                    "value": {
+                      "error": {
+                        "message": "No such user.",
+                        "code": "NO_SUCH_USER",
+                        "id": "fcd2eef9-a9b2-4c4f-8624-038099e90aa5"
+                      }
+                    }
+                  },
+                  "URI_NULL": {
+                    "value": {
+                      "error": {
+                        "message": "User ActivityPup URI is null.",
+                        "code": "URI_NULL",
+                        "id": "bf326f31-d430-4f97-9933-5d61e4d48a23"
+                      }
+                    }
+                  },
+                  "FORBIDDEN_TO_SET_YOURSELF": {
+                    "value": {
+                      "error": {
+                        "message": "You can't set yourself as your own alias.",
+                        "code": "FORBIDDEN_TO_SET_YOURSELF",
+                        "id": "25c90186-4ab0-49c8-9bba-a1fa6c202ba4"
+                      }
+                    }
+                  },
+                  "RESTRICTED_BY_ROLE": {
+                    "value": {
+                      "error": {
+                        "message": "This feature is restricted by your role.",
+                        "code": "RESTRICTED_BY_ROLE",
+                        "id": "8feff0ba-5ab5-585b-31f4-4df816663fad"
+                      }
+                    }
+                  },
+                  "YOUR_NAME_CONTAINS_PROHIBITED_WORDS": {
+                    "value": {
+                      "error": {
+                        "message": "Your new name contains prohibited words.",
+                        "code": "YOUR_NAME_CONTAINS_PROHIBITED_WORDS",
+                        "id": "0b3f9f6a-2f4d-4b1f-9fb4-49d3a2fd7191",
+                        "httpStatusCode": 422
+                      }
+                    }
+                  },
+                  "ACCESS_DENIED": {
+                    "value": {
+                      "error": {
+                        "message": "Only administrators can edit members of the role.",
+                        "code": "ACCESS_DENIED",
+                        "id": "25b5bc31-dc79-4ebd-9bd2-c84978fd052c"
+                      }
+                    }
+                  },
+                  "INVALID_PARAM": {
+                    "value": {
+                      "error": {
+                        "message": "Invalid param.",
+                        "code": "INVALID_PARAM",
+                        "id": "3d81ceae-475f-4600-b2a8-2bc116157532"
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          },
+          "401": {
+            "description": "Authentication error",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/Error"
+                },
+                "examples": {
+                  "CREDENTIAL_REQUIRED": {
+                    "value": {
+                      "error": {
+                        "message": "Credential required.",
+                        "code": "CREDENTIAL_REQUIRED",
+                        "id": "1384574d-a912-4b81-8601-c7b1c4085df1"
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          },
+          "403": {
+            "description": "Forbidden error",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/Error"
+                },
+                "examples": {
+                  "AUTHENTICATION_FAILED": {
+                    "value": {
+                      "error": {
+                        "message": "Authentication failed. Please ensure your token is correct.",
+                        "code": "AUTHENTICATION_FAILED",
+                        "id": "b0a7f5f8-dc2f-4171-b91f-de88ad238e14"
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          },
+          "418": {
+            "description": "I'm Ai",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/Error"
+                },
+                "examples": {
+                  "I_AM_AI": {
+                    "value": {
+                      "error": {
+                        "message": "You sent a request to Ai-chan, Misskey's showgirl, instead of the server.",
+                        "code": "I_AM_AI",
+                        "id": "60c46cd1-f23a-46b1-bebe-5d2b73951a84"
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          },
+          "500": {
+            "description": "Internal server error",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/Error"
+                },
+                "examples": {
+                  "INTERNAL_ERROR": {
+                    "value": {
+                      "error": {
+                        "message": "Internal error occurred. Please contact us if the error persists.",
+                        "code": "INTERNAL_ERROR",
+                        "id": "5d37dbcb-891e-41ca-a3d6-e690c97775ac"
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    },
     "/admin/unset-user-avatar": {
       "post": {
         "operationId": "admin___unset-user-avatar",

Get diff files from Workflow Page

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
packages/backend Server side specific issue/PR packages/frontend Client side specific issue/PR packages/misskey-js
Projects
Development

Successfully merging this pull request may close these issues.

1 participant