77using OutlineManager . Types ;
88using Newtonsoft . Json . Linq ;
99using System . Linq ;
10+ using Newtonsoft . Json ;
1011using OutlineManagerExceptions ;
1112
1213namespace OutlineManager
@@ -91,6 +92,51 @@ private static bool CallRequest(string urlMethod, string method, JObject args, o
9192 }
9293 }
9394
95+ /// <summary>
96+ /// Get Info about Outline Server
97+ /// </summary>
98+ /// <returns>Outline Server Info in <see cref="T:OutlineManager.Types.OutlineServer" /></returns>
99+ /// <exception cref="OutlineManagerException"></exception>
100+ public OutlineServer GetOutlineServer ( ) {
101+ CallRequest ( "server" , "GET" , out var data ) ;
102+ return JsonConvert . DeserializeObject < OutlineServer > ( data ) ;
103+ }
104+
105+ ///<summary>
106+ /// Changes the hostname for access keys.
107+ /// Must be a valid hostname or IP address.
108+ /// If it's a hostname, DNS must be set up independently of this API.
109+ ///</summary>
110+ /// <returns><b>True</b>, if the hostname was changed succesfully</returns>
111+ public bool ChangeHostname ( string newHostname ) {
112+ return CallRequest ( "server/hostname-for-access-keys" , "PUT" , new JObject { { "hostname" , newHostname } } , out _ ) ;
113+ }
114+
115+ ///<summary>
116+ /// Changes the default port for newly created access keys.
117+ /// This can be a port already used for access keys.
118+ ///</summary>
119+ /// <returns><b>True</b>, if the port was changed succesfully</returns>
120+ public bool ChangePort ( int newPort ) {
121+ return CallRequest ( "server/port-for-new-access-keys" , "PUT" , new JObject { { "port" , newPort } } , out _ ) ;
122+ }
123+
124+ ///<summary>
125+ /// Rename the Outline Server
126+ ///</summary>
127+ /// <returns><b>True</b>, if the server name was changed succesfully</returns>
128+ public bool RenameServer ( string newName ) {
129+ return CallRequest ( "name" , "PUT" , new JObject { { "name" , newName } } , out _ ) ;
130+ }
131+
132+ ///<summary>
133+ /// Change Metrics Sharing
134+ ///</summary>
135+ /// <returns><b>True</b>, if the metrics sharing was changed succesfully</returns>
136+ public bool ChangeMetricsSharing ( bool newParam ) {
137+ return CallRequest ( "metrics/enabled" , "PUT" , new JObject { { "metricsEnabled" , newParam } } , out _ ) ;
138+ }
139+
94140 /// <summary>
95141 /// Get Outline key in <see cref="T:OutlineManager.Types.OutlineKey" /> by ID
96142 /// </summary>
@@ -116,17 +162,31 @@ public OutlineKey GetKeyById(int id)
116162 /// <param name="name">Name of key</param>
117163 /// <returns></returns>
118164 /// <exception cref="OutlineManagerException"></exception>
119- public OutlineKey GetKeyByName ( string name )
165+ public OutlineKey GetKeyByName ( string name , SearchMethod searchMethod )
120166 {
121167 var list = GetKeys ( ) ;
122168 OutlineKey oKey = new OutlineKey ( ) { Id = - 1 } ;
123169 foreach ( var key in list )
124- if ( key . Name . ToLower ( ) == name . ToLower ( ) )
125- oKey = key ;
126- else if ( key . Name == name )
127- oKey = key ;
128- else if ( key . Name . ToLower ( ) . StartsWith ( name . ToLower ( ) ) )
129- oKey = key ;
170+ switch ( searchMethod )
171+ {
172+ case SearchMethod . StartsWith :
173+ if ( key . Name . StartsWith ( name ) )
174+ oKey = key ;
175+ break ;
176+ case SearchMethod . StartsWithToLower :
177+ if ( key . Name . ToLower ( ) . StartsWith ( name . ToLower ( ) ) )
178+ oKey = key ;
179+ break ;
180+ case SearchMethod . Equality :
181+ if ( key . Name == name )
182+ oKey = key ;
183+ break ;
184+ case SearchMethod . EqualityToLower :
185+ if ( key . Name . ToLower ( ) == name . ToLower ( ) )
186+ oKey = key ;
187+ break ;
188+ }
189+
130190 if ( oKey . Id == - 1 )
131191 throw new OutlineManagerException ( "Key not exist or not found by name in your Outline Server" ) ;
132192 else
@@ -223,3 +283,4 @@ public List<TransferredData> GetTransferredData()
223283 }
224284 }
225285}
286+
0 commit comments